【每日演算法】劍指 Offer字串的排列
阿新 • • 發佈:2021-08-03
目錄
題目描述
這是 LeetCode 上的 劍指 Offer 38. 字串的排列,
難度為 【中】
輸入一個字串,打印出該字串中字元的所有排列。
你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。
示例 1:
輸入:s = "abc"
輸出:["abc","acb","bac","bca","cab","cba"]
提示:
1 <= s 的長度 <= 8
字串中有可能會有重複的元素
程式碼實現
class Solution(object): def permutation(self, s): s=list(s) res=[] n=len(s) def dfs(step): if step==n-1: res.append(''.join(s)) return dic=set()#記錄重複的字串 for i in range(step,n): #比如第0位已經被字元a替換過,後面再有a的話就不再被替換了 #如果替換,則替換後的字元和之前的某個其他位置上的a替換的結果是一樣的 if s[i] in dic:continue#如果某個字串已經被訪問過,則直接跳過 dic.add(s[i]) s[i],s[step]=s[step],s[i] # print(''.join(s)) dfs(step+1) s[step],s[i]=s[i],s[step] dfs(0) return res