python dfs 回溯
字符串的排列
http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7
先自己写的,然后看了看别人写的,和我都不是一个思路,还有点太复杂,那我也写一写吧。我用到了dfs和回溯,语言是python
因为ss中可能有重复的字符,所以不能直接使用not in 这样的表达,所以我另外加了一个flag 标志数组,dfs函数中传递进去,dfs后讲flag变量改回来,这是回溯,而因为有temp 和temp1 所以不用再将temp改回来了,每次将temp1 传进下一次递归,递归出来后继续用temp
感觉自己的代码不够python,还是java 的风格,哈哈,见谅
def Permutation(self, ss): """ 字符串的排列顺序,可以用dfs,有个问题,ss 里面可能有重复的数字 :param ss: :return: """ if len(ss) == 0: return [] self.res=[] temp="" flag=[] for i in range(0,len(ss)): flag.append(False) self.dfs(ss,temp,flag) #剔除重复的,不能保证顺序 #return list(set(self.res)) res2 = [] for x in self.res: if x not in res2: res2.append(x) return res2 def dfs(self, ss,temp,flag): if len(temp)==len(ss): self.res.append(temp) else: for i in range(0,len(ss)): if not flag[i]: temp1=temp+ss[i] flag[i]=True self.dfs(ss,temp1,flag) flag[i]=False