leetcode刷題 全排列

2022-10-08 03:39:07 字數 985 閱讀 6767

給定乙個不含重複數字的陣列 nums ,返回其 所有可能的全排列 。你可以 按任意順序 返回答案。

輸入:nums = [1,2,3]

輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

這個問題可以看作有 n 個排列成一行的空格,我們需要從左往右依此填入題目給定的 n 個數,每個數只能使用一次。那麼很直接的可以想到一種窮舉的演算法,即從左往右每乙個位置都依此嘗試填入乙個數,看能不能填完這 n 個空格,在程式中我們可以用「回溯法」來模擬這個過程。

我們定義遞迴函式 backtrack(first, output) 表示從左往右填到第 first 個位置,當前排列為 output。 那麼整個遞迴函式分為兩個情況:

如果 first==n,說明我們已經填完了 n 個位置(注意下標從 0 開始),找到了乙個可行的解,我們將 output 放入答案陣列中,遞迴結束。

如果 first

class solution:

def permute(self,nums:list[int]) -> list[list[int]]:

size = len(nums)

ans =

def backtrack(first=0):

# 所有的數字都填完了,返回乙個排列結果

if first == size:

for i in range(first,size):

nums[first],nums[i] = nums[i],nums[first]

# 繼續遞迴填入下乙個數

backtrack(first+1)

#撤銷操作

nums[first],nums[i] = nums[i],nums[first]

backtrack()

return ans

LeetCode刷題之47 全排列 II

我不知道將去向何方,但我已在路上!輸入 1,1,2 輸出 1,1,2 1,2,1 2,1,1 class solution def permuteunique self,nums list int list list int iflen nums 1 return nums a k for i in...

leetcode刷題之路47 全排列 II

給定乙個可包含重複數字的序列,返回所有不重複的全排列。示例 輸入 1,1,2 輸出 1,1,2 1,2,1 2,1,1 之前的加個判斷就行了 void backtracking vector nums,int start,vector temp,vectorint ans for int i sta...

Leecode刷題筆記 46 全排列

題目要求 給定乙個 沒有重複 數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 思路如下 1 全排列需要遍歷所有元素得出所有方案,可以考慮dfs 回溯的思路解題 2 需要注意的是 list.add newarra...