题目描述:
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串“abc”,则打印出由a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
解题思路:
我们解这题时可以将字符串划分为两部分:首字符和后面的所有字符。
首先求所有可能出现在第一个位置的字符,即把首字符和后面的字符交换。
下图是字符串abc所有字符出现在第一个位置的情形:
然后对后面部分的字符串进行第一步操作:
很容易想到使用递归去解决这个问题。
代码:
# -*- coding:utf-8 -*-
def Permutation(ss):
if len(ss) <=0:
return []
res = list()
perm(ss,res,'')
uniq = list(set(res))
return sorted(uniq)
def perm(ss,res,path):
if ss=='':
res.append(path)
else:
for i in range(len(ss)):
perm(ss[:i]+ss[i+1:],res,path+ss[i])
if __name__ == '__main__':
print(Permutation('abc'))