题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
# -*- coding:utf-8 -*-
class Solution:
def Permutation(self, ss):
# write code here
if len(ss) <=0:
return []
res = list()
self.perm(ss,res,'')
uniq = list(set(res))
return sorted(uniq)
def perm(self,ss,res,path):
if ss=='':
res.append(path)
else:
for i in range(len(ss)):
self.perm(ss[:i]+ss[i+1:],res,path+ss[i])
递推的思想(从上至下):
把字符串分为两个部分:
1-字符串的第一个字符
2-第一个字符以后的所有的字符
第一步:求所有可能出现在第一位置的字符,遍历用索引实现
第二步:求第一个字符以后的所有的字符的全排列,我们人可以将后面的字符串分成两个部分:
1-后面字符串的第一个字符
2-这个字符以后的所有字符
求所有可能 出现在第一个位置的字符,遍历用索引实现
我的归纳:每次都在剩余的序列里找一个字母充当首字符。
参考: