トピック
重複する数値のない配列を指定すると nums
、 考えられるすべての順列を返します 。回答は任意の順序で返すことができます 。
例 1:
**入力: **nums = [1,2,3]
出力: [[1,2,3],[1,3,2],[2,1,3],[2,3,1], [3,1,2],[3,2,1]]
例 2:
**入力: **nums = [0,1]
出力: [[0,1],[1,0]]
例 3:
**入力: **nums = [1]
出力: [[1]]
アイデア
サブ質問の DFS バージョンは 5 分と秒続きます。本質的には、DFS 状態の転送 + 状態のバックトラッキング + 終了条件の処理です。この質問では、数値が選択されるたびにテーブルが必要であることを考慮する必要があります。選択されている番号を記録します。選択されていないものを選択するたびに、DFS はステータスをバックトラックし、選択内容を空にリセットします。ここでは List.copy が使用されていることに注意してください。そうでないと、参照が単なるものである場合に問題が発生します。保存され、新しいリストは生成されず、リストのコピーは浅いコピーにすぎません。適切なタイミングでコピーする必要があることに注意してください。
コード
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
lenNums = len(nums)
numsTab = {}
for v in nums:
numsTab[v] = -1
ans = []
def DFS(cur):
if(len(cur) == lenNums):
ans.append(cur)
return
for i in range(0,lenNums):
if(numsTab[nums[i]] == -1):
numsTab[nums[i]] = 1
tempList = cur.copy()
tempList.append(nums[i])
DFS(tempList)
numsTab[nums[i]] = -1
DFS([])
return ans