異なる整数の集合を考えると、すべての可能な順列を返します。
例:
入力:[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]は