zoukankan      html  css  js  c++  java
  • 如何通过回溯法进行排列组合

    
    
    # 不考虑重复元素的情况
    
    
    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
  • 相关阅读:
    MyStreamRequestHandlerr
    SocketFromServer
    MyQMainWindowDemo
    MyQThread
    Nginx安装与配置
    nginx软件优化
    MySQL优化实施方案
    tomcat优化方向
    Tomcat优化方案
    Nginx和Tomcat优化
  • 原文地址:https://www.cnblogs.com/bianque/p/13441366.html
Copyright © 2011-2022 走看看