输⼊⼀个字符串,输出该字符中字符的所有组合。
前⾔
在此研究:
1)给定⼀个字符串,如何对其中字母进⾏排列组合;
2)进⼀步了解Python递归。
题⽬内容
在指定位置编写代码,完成函数,根据给定的字符串,给出组成该字符串的字符的所有排列构成的字符串,例如字符串为abc时,结果为abc、acb、bac、bca、cab、cba。(提⽰:可以考虑拿掉某个位置的字符,则“该字符+其左边字符的所有排列+其右边字符的所有排列”就是该字符在指定位置的所有排列字符串)
字符串函数去重解题思路
可以⽤递归的⽅法来解决问题。
1)我们先确定字符串第⼀个字母是谁,对于长度为n的字符串,总共有n种情况;
2)然后呢,问题就从“返回字符串中的字母排列组合” 变成了 “返回第⼀个字母+除去第⼀个字母外的字符串的排列组合”,有点⼤⽽化⼩,分⽽治之的感觉。
具体代码,⽹上很多地⽅都有代码答案,只需在百度搜索关键字”Python 字符串排列组合“即可,所以这⾥我就不另写代码了,引⽤ [1],因为我感觉这个算是解释的⽐较详细的了。
代码如下 [1]:
def perm(s=''):
# 这⾥是递归函数的出⼝,为什么呢,因为这⾥表⽰:⼀个长度为1的字符串,它的排列组合就是它⾃⼰。
if len(s)<=1:
return [s]
sl=[] #保存字符串的所有可能排列组合
for i in range(len(s)):  #这个循环,对应解题思路1)确定字符串的第⼀个字母是谁,有n种可能(n为字符串s的长度
for j in perm(s[0:i]+s[i+1:]): #这个循环,对应解题思路2)进⼊递归,s[0:i]+s[i+1:]的意思就是把s中的s[i]给去掉
sl.append(s[i]+j) # 对应解题思路2)问题就从“返回字符串中的字母排列组合” **变成了** “返回第⼀个字母+除去第⼀个字母外的字符串的排列组合”
return sl
def main():
perm_nums=perm('abb') # 有可能存在字母相同的情况
no_repeat_nums = list(set(perm_nums)) # 去重,挺⽜的,这个代码
print('perm_nums', len(perm_nums), perm_nums)
print('no_repeat_nums', len(no_repeat_nums), no_repeat_nums)
pass
if__name__ == '__main__':
main()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。