[LC] 46.順列

異なる整数の集合を考えると、すべての可能な順列を返します。

例:

入力:[1,2,3] 
出力
  [ [1,2,3]、
  [1,3,2]、
  [2,1,3]、
  [2,3,1]、
  [3,1,2 ]、
  [3,2,1] 
] 

時間:O(N!)
スペース:O(N)

クラスのソリューション:
     デフ並び替える(自己、NUMS:リスト[INT]) - > 一覧[一覧[INT]:
        RES = []
         場合 NUMSがあるなしまたは LEN(NUMS)== 0:
             返すRES 
        my_set = セット()
        cur_list = [] 
        self.dfs(0、my_set、NUMS、cur_list、RES)
        を返すRES 
        
    DEF DFS(自己、レベル、my_set、NUMS、cur_list、RES):
         もしレベル== LEN(NUMS):
            res.append(リスト( cur_list))
            のリターン
        
        のための I範囲(LEN(NUMS)):
             場合 NUMS [i]がmy_set:
                 続ける
            my_set.add(NUMS [i])と
            cur_list.append(NUMS [i])と
            self.dfs(レベル + 1 、my_set、NUMS、cur_listをRES)
            my_set.remove(NUMS [I])
            cur_list.pop()
        
        
       

解決策2:

クラスのソリューション(オブジェクト):
     デフ並び替える(自己、NUMS):
         "" " タイプNUMS:リスト[INT] 
        :RTYPE:リスト[一覧[INT]] 
        """ 
        RES = []
         場合 NUMSはありませんなしまたは LEN(NUMS )== 0:
             リターンRES 
        self.dfs(NUMS、0、RES)
        を返すRES 
        
    DEF DFS(自己、配列、レベル、RES):
         もしレベル== LEN(アレイ):
            res.append(リスト(配列))
            リターンRES 
        
         I における範囲(レベルにおいてlen(配列))。
            アレイ[レベル]、配列[I] = 配列[i]は、配列[レベル]         
            self.dfs(アレイ、レベル + 1 、RES)
            配列[i]は、配列[レベル] =配列[レベル]、配列[i]は

 

おすすめ

転載: www.cnblogs.com/xuanlu/p/11569694.html