难度中等400
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
深度递归(回溯)
固定
[a] [bc]
[ab][c]
[abc][]
[ac][b]
[acb][]
[b][ac]
[ba][c]
[bac][]
[bc][a]
[bca][]
[c][ab]
[ca][b]
[cab][]
[cb][a]
[cba][]
1.是否满足条件,记录结果
2.判断终止条件
3.继续搜索
示例:
输入:s = "abc" 输出:["abc","acb","bac","bca","cab","cba"]
class Solution:
def permutation(self, s: str) -> List[str]:
n=len(s)
res=[]
queue=list(s) #因为str不可变,故用list改变值的位置
def sort_a(x): #固定第x位的字符
if x==n:
res.append("".join(queue)) #当固定到最后一位时,结束递归
return
alist=set() #记录已经固定过的值
for i in range(x,n):
if queue[i] in alist:
continue
alist.add(queue[i])
queue[i],queue[x]=queue[x],queue[i]
sort_a(x+1)
queue[i],queue[x]=queue[x],queue[i]
sort_a(0)
return res
# a=list(s)
# b=[]
# for i in permutations(s):
# t="".join(i)
# b.append(t)
# return list(set(b))