如何通过回溯法进行排列组合
# 不考虑重复元素的情况 def permutation(self,arr): res = [] def dfs(arr,s,e): if s==e: res.append(str(arr)) else: for i in range(s,e+1): arr[s],arr[i] = arr[i],arr[s] dfs(arr,s+1,e) arr[s], arr[i] = arr[i], arr[s] dfs(arr,0,len(arr)-1) return res
给定一个数列 list,假设数列中已经排序的元素为 list[0:s] ,未排序的数列元素为 list[s:e]。 从数列s-e中按照顺序取出元素并与list[0:s]中的元素进行置换。
得到所有的可能组合
#考虑重复元素的情况 def permutation(arr): res ,c= [],list(arr) def dfs(x): if x == len(c)-1: res.append(''.join(c)) repeat = set() for i in range(x,len(c)): if c[i] in repeat:continue repeat.add(c[i]) c[i],c[x]=c[x],c[i] dfs(x+1) c[i],c[x]=c[x],c[i] dfs(0) return res