题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
知识点:
-
字符串是一种不能改变位置的数据结构
-
不同于list
-
但是通过转换成list形式就可以改变了
-
这个题目的思路还是要用递归的方法
-
每次要抽取第i个字符,让接下来的字符进行排序
-
然后再把第i个字符放在首位
-
每次考虑要不要用递归的时候,就要看看问题能不能构建为一个和之前的状态有关的表达式
-
新的tmp = ss[i] + self.Permutation(ss[:i]+ss{i+1:])
-
这就说明新的这个tmp是和之前状态有关的
-
判断tmp在不在已经有的L中
-
然后我们通过循环把所有的tmp列出来就完成了
-
最终还是要返回L的
class Solution:
def Permutation(self, ss):
L = []
length = len(ss)
if length <= 1:
return ss
ss = list(ss)
for i in range(length):
for j in range(length-i-1):
if str(ss[j]) > str(ss[j+1]):
ss[j], ss[j+1] = ss[j+1], ss[j]
for i in range(length):
for j in self.Permutation(ss[:i] + ss[i+1:]):
tmp = ss[i] + str(j)
if tmp not in L:
L.append(tmp)
return L