支持原创,转载链接如下:
https://blog.csdn.net/u010005281/article/details/79920046
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
解题思路:
这道题难度较大,开始时毫无头绪,学习了https://blog.csdn.net/u010005281/article/details/79920046的文章后,才逐渐明白过来。最核心的思想在于:和青蛙跳台阶一样,无论给定的字符串长度多少,其排列出来的组合样式均可以分解为“第一个字符+剩下的字符”的样式。可以通过遍历分别赋予第一位上不同的字符,那“剩下的字符”又可以如上分解。
def Permutation(self, ss):
res = []
if len(ss) <= 1:
return ss
for i in range(len(ss)):
for n in map(lambda x:ss[i] + x, self.Permutation(ss[:i] + ss[i + 1:])):
res.append(n)
return res
下面这张图能够帮助读者更快地理清这一段Python代码的实现流程。