字符串的排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
简单的思路,依次取出字符串里面的字母,如‘abc’则先取出a,然后用b对前一次循环的所有字符串的空缺处进行插入,比如b插入‘a’的前后变成了‘ab’和‘ba’,然后下次循环取出c,对上依次所有的字符串继续插值得到’cab’,‘acb’,‘abc’,‘cba’,‘bca’,‘bac’,同时注意如果要插入的位置的后面如果跟当前字符串相同,则跳过这个插入位置。
class Solution:
def Permutation(self, ss):
# write code here
if ss == '':
return []
res=[ss[0]]
print res
part=[]
for i in range(1,len(ss)):
for n in res:
for k in range(len(res[0])):
if ss[i]!=n[k]:#判断是否重复
part.append(n[:k]+ss[i]+n[k:])
part.append(n+ss[i])#最后再加入最后一个空缺位置
res=part
part=[]
return sorted(res)
另一种方法则是递归,每次取出任意一个字符,对剩下的字符串全排列即可,排除重复也是用相同的方法。
class Solution:
def Permutation(self, ss):
# write code here
res = []
if len(ss) < 2:
return ss.split()
for i in range(len(ss)):
for n in map(lambda x: x+ ss[i], self.Permutation(ss[:i]+ss[i+1:])):
if n not in res:
res.append(n)
return sorted(res)