如何通过回溯法进行排列组合


# 不考虑重复元素的情况


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

 

posted @ 2020-08-05 17:30  扁鹊小脑  阅读(279)  评论(0编辑  收藏  举报