1. 題目
給定一個字符串,找出有該字符串所有字符排列組成的所有字符串。
2. 方法
迭代,遍歷字符串,取遍歷的字符當作首字符,對剩下的字符組成的字符串再次進行全排列操作。
注意:有可能出現相同字符的情況,用visited來記錄首位置出現過的字符。
###
def quan_pailie(s,res=[]):
if not s:
return []
elif len(s) == 1:
return [s[0]]
res = []
visited = set()
for i,item in enumerate(s):
if item in visited:
continue
visited.add(item)
new_s = s[:i] + s[i+1:]
tmp = quan_pailie(new_s,[])
for V in tmp:
res.append(s[i] + V)
return res
s = 'abbc'
print(quan_pailie(s))
print(len(set(quan_pailie(s))))
運行結果:
['abbc', 'abcb', 'acbb', 'babc', 'bacb', 'bbac', 'bbca', 'bcab', 'bcba', 'cabb', 'cbab', 'cbba']
12
參考: