輸入乙個字串,列印出該字串中字元的所有排列。思路:你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。
示例:輸入:s = "abc"
輸出:["abc","acb","bac","bca","cab","cba"]
選定乙個字元作為起始字元,其他字元全排列加到後面,所以顯然這是乙個遞迴問題。
解法一:排序去重
class solution(object):
def permutation(self, s):
""":type s: str
:rtype: list[str]
"""s = list(sorted(s))
res =
def dfs(s, tmp):
if not s:
return
for i, c in enumerate(s):
if i > 0 and s[i] == s[i-1]: # 去重
continue
dfs(s[:i] + s[i+1:], tmp + [c])
dfs(s, )
return res
解法二:set去重
class solution(object):
def permutation(self, s):
""":type s: str
:rtype: list[str]
"""n = len(s)
res = set() # 去重
def dfs(s, tmp):
if not s:
res.add(tmp)
return
for i, c in enumerate(s):
dfs(s[:i] + s[i+1:], tmp + c)
dfs(s, '')
return list(res)
參考: 劍指Offer 38 字串的排列
輸入乙個字串,列印出該字串中字元的所有排列。例 輸入 abc 輸出 abc acb bac cab cba 長度為n的字串的排列若是集合s,其中一種排列的字串為 s2,sn s2 sn 再插入sn 1s sn 1 則有對於乙個字串有n 1個插入位置。因此,解題思路就是每次遞迴加入乙個字元,直到字串全...
劍指 Offer 38 字串的排列
輸入乙個字串,列印出該字串中字元的所有排列。你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。示例 輸入 s abc 輸出 abc acb bac bca cab cba class solution boolean visited new boolean s.length dfs s,vis...
劍指 Offer 38 字串的排列
輸入乙個字串,列印出該字串中字元的所有排列。你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。示例 輸入 s abc 輸出 abc acb bac bca cab cba 限制 1 s 的長度 8 通過次數30,289提交次數55,865 思路 回溯法。這道題應該這樣來理解,對於每乙個位置,在...