1. 程式人生 > 其它 >【每日演算法】劍指 Offer字串的排列

【每日演算法】劍指 Offer字串的排列

目錄

題目描述


這是 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