回溯算法,字符串全排列
虽然又慢又占空间,但是是自己做的,比较好理解
class Solution:
def recursion(self, string, origin, res, length):
if len(string) == length:
tmp = "".join(string)
res.append(tmp)
return res
has = {} # 哈希表,同一层储存已经用过的字符
for i in range(len(origin)):
letter = origin.pop(i)
if letter in has:
origin.insert(i, letter)
continue
has[letter] = 1 # 标记,已经用过了
string.append(letter)
self.recursion(string, origin, res, length) # 递归
string.pop() # 回溯
origin.insert(i, letter)
def Permutation(self , str: str) -> List[str]:
# write code here
origin = list(str)
length = len(origin)
string = []
res = []
self.recursion(string, origin, res, length)
return res