LeetCode演算法題46 全排列解析

2021-09-03 07:11:41 字數 1510 閱讀 5173

給定乙個沒有重複數字的序列,返回其所有可能的全排列。

示例:

輸入: [1,2,3]

輸出:[

[1,2,3],

[1,3,2],

[2,1,3],

[2,3,1],

[3,1,2],

[3,2,1]

]

這個題突然讓我又對遞迴產生了新的認識,遞迴可以是不確定層數的巢狀迴圈。。。所以這個題還是用遞迴來解,思路還是深度優先搜尋,其實想還是很好想的,和之前那個組合總和很像,有些區別就是這個遞迴的還是所有的數字,但是已經取到的要排除掉,所以這裡只好打個標記。

c++源**:

class

solution

void

permutedfs

(vector<

int>

& nums,

int layer, vector<

int>

& flag, vector<

int>

& out, vectorint>>

& res)}}

}};

python3的**用另一種方法,依舊是遞迴,只是這裡是不斷的交換兩個數字,如果想不太通的話,可以只想三個數的情況,三個數就是先取第乙個數,然後這種情況下先可以交換後面兩個數就有了兩種情況,然後第乙個數和第二個數交換有了一種情況然後在這種情況下第二個數和第三個數交換就可以一共有兩種情況,同理第乙個數和第三個數交換也可以有兩種情況。實際順序如下:

[[1,2,3],

[1,3,2],

[2,1,3],

[2,3,1],

[3,2,1],

[3,1,2]]

python3源**:

class

solution

:def

permute

(self, nums)

:"""

:type nums: list[int]

:rtype: list[list[int]]

"""res =

self.permutedfs(nums,

0, res)

return res

defpermutedfs

(self, nums, start, res)

:if start>=

len(nums): )

return

for i in

range

(start,

len(nums)):

nums[start]

, nums[i]

= nums[i]

, nums[start]

self.permutedfs(nums, start+

1, res)

nums[start]

, nums[i]

= nums[i]

, nums[start]

LeetCode第46題 全排列

給定乙個 沒有重複 數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 全排列問題都可以用dfs 深度優先遍歷 解決,不過這個題是帶權型別的 自稱 所以需要標記位。大致畫了個圖如下 param nums 傳入陣列 ...

演算法 leetcode46全排列

leetcode 全排列 給定乙個 沒有重複 數字的序列,返回其所有可能的全排列。示例 輸入 1 2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 這道題我們需要使用回溯的方法來進行求解。那我們回溯法的解體框架是什麼呢,解決乙個回溯問題,實際上就是乙個決策樹的遍歷...

leetcode 第46題和第47題 全排列問題

leetcode 第46題和第47題 都是求乙個給定陣列中的全排列問題,不同之處在於47題中陣列的元素可以重複。這也是乙個遞迴問題。對於陣列中的每個元素,它的全排列就等於它本身加上除它以外所有的全排。所以只要這樣依次計算全排列就行。class solution private void permut...