题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
注意:输入一个字符串,长度不超过9(可能有字符重复
),字符只包括大小写字母。(去重
)
分析
利用回溯法全排列模板,结果去重
,在排字典序
。
代码
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.tempRes = []
self.res = []
self.n = 0
def backtrack(self, k):
if k>=self.n:
self.res.append(''.join(self.tempRes))
else:
for i in range(k,self.n):
self.tempRes[k], self.tempRes[i] = self.tempRes[i], self.tempRes[k]
self.backtrack(k+1)
self.tempRes[k], self.tempRes[i] = self.tempRes[i], self.tempRes[k]
def Permutation(self, ss):
# write code here
if not ss:
return []
self.tempRes = list(ss)
self.n = len(ss)
self.backtrack(0)
return sorted(list(set(self.res)))