題目描述
輸入一個字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串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)))