前言
此处的研究:
1 )给出字符串,如何排列组合其中的字符
2 )详细了解Python递归。
主题内容
在指定位置编写代码,完成函数,并根据给定的字符串给出包含组成该字符串的字符的所有数组的字符串。 例如,如果字符串为abc,则结果为abc、acb、bac、bca、cab和cba。 (提示:“该字符左侧字符的所有数组右侧字符的所有数组”可能会删除某个位置的字符。 )
解开想法
可以用递归的方法解决问题。
1 )首先,确认字符串的第一个字符是谁。 对于长度为n的字符串,可能共有n种。
2 )然后,问题从“返回字符串中字符的排列组合”更改为“返回第一个字符并排除第一个字符的字符串排列组合”。 有点大,小,感觉是分开的。
具体代码在网上很多地方都有代码的答案。 在百度上搜索关键字“Python字符串数组组合”就可以了,所以这里不写别的代码。 引用[1]。 这是因为我觉得更详细地说明了。
代码如下[1]:defperm(s=' ' ) :
#这里是递归函数的出口。 因为这里是一个长度为1的字符串,表示该数组的组合是自己。
iflen(s )=1:
return [s]
sl=[] #保存字符串的所有可能数组组合
forIinrange(len ) s ) : # )的循环,与解决问题的想法1 )相对应地确定字符串的第一个字符是谁,有n种可能性(n是字符串s的长度)
forjinperm (s [ 0: # I ] s [ I 1: ] ) : )该循环对应于解题思路2 )进入递归,s[0:i] s[i 1:]取s中的s[i]
sl.append(s[I]j )解题思路2 )问题从“返回字符串中的字符排列组合”**变为**“返回第一个字符并排除第一个字符的字符串排列组合”
返回SL
defmain(: )
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 ) )。
传球
if __name__=='__main__':
主() )
总结
性能编号
[usually pl.]数组; 组合; 替换
anyofthedifferentwaysinwhichasetofthingscanbeordered
the可移植性能of x,y and z are xyz,xzy,yxz,yzx,zxy and zyx。
x、y和z的组合可以是xyz、xzy、yxz、yzx、zxy和zyx。
另外,最初不太清楚Python的递归,无法读取代码。 参考[2],你会发现一些。
另外,还参考了相关网站[3]、[4]
参考文献