排序法
class Solution(object):
def permutation(self, s):
"""
:type s: str
:rtype: List[str]
"""
s = sorted(s)
res = []
sol = []
vsd = [0]*len(s)
def backtrack(s, res, sol, vsd):
if len(s) == len(sol):
res.append(''.join(sol[:]))
for i in range(len(s)):
if vsd[i] == 1:
continue
if i > 0 and s[i]==s[i-1] and vsd[i-1]==0:
continue
vsd[i] = 1
sol.append(s[i])
backtrack(s, res, sol, vsd)
vsd[i] = 0
sol.pop()
backtrack(s, res, sol, vsd)
return res
set去重法
class Solution(object):
def permutation(self, s):
"""
:type s: str
:rtype: List[str]
"""
res = set()
sol = []
vsd = [0]*len(s)
def backtrack(s, res, sol, vsd):
if len(s) == len(sol):
res.add("".join(sol[:]))
for i in range(len(s)):
if vsd[i] == 1:
continue
vsd[i] = 1
sol.append(s[i])
backtrack(s,res, sol, vsd)
vsd[i] = 0
sol.pop()
backtrack(s, res, sol, vsd)
return list(res)