46 全排列 47 全排列II

2021-09-08 06:24:18 字數 1361 閱讀 4619

46. 全排列

這題和之前做的劍指offer上的字串全排列。一樣。

分析[1]:如果原始要排列的陣列順序為1、2、3、4,現在只要分別交換1、2,1、3,1、4然後對剩下的3個元素進行遞迴的排列。

自己的code:100%

class solution 

if(start > nums.

size()

-1)return

;for

(int i = start; i < nums.

size()

; i++)}

vector

int>>

permute

(vector<

int>

& nums)

};

47. 全排列ii

給定乙個可包含重複數字的序列,返回所有不重複的全排列。

這題讓我想起之前刷的那道組合總和ii

新增語句比46,if (i != start&&nums[i] == nums[i - 1])continue;sort

之後會發現還是會有重複的,例如0,0,0,1,9。

雖然避免了00019在開頭重複,但是不可避免在後面重複91000.

這時採用set.

c++ code 99.6%:

class solution 

if(start > nums.

size()

-1)return

;for

(int i = start; i < nums.

size()

; i++)}

vector

int>>

permuteunique

(vector<

int>

& nums)

};

方法二:不用set,

分析:每次for迴圈中找,level深度到了就ok,

借助乙個visit輔助陣列和out臨時儲存

下面code 99.6%

class solution 

for(

int i =

0; i < nums.

size()

; i++)}

} vector

int>>

permuteunique

(vector<

int>

& nums)

};

[1]

46 全排列 全排列 遞迴

遞迴的時候每次確定乙個位置的數字 nums陣列在遞迴過程中分為左右兩部分,左邊部分是已經確定好的部分,而右邊是待確定數字的部分。每次都嘗試用當前位置右邊的數字來交換當前數字以確定當前數字。題目可以使用collections來優化。詳見 class solution 遞迴過程中每次確定乙個位置的數,遞...

全排列 全排列ii 子集 子集ii

2 全排列ii 3 子集 4 子集ii 5 資料排列 解題步驟 首先,要通過讀題完成下面三個步驟 1 描述解的形式,定義乙個解空間,它包含問題的所有解。2 構造狀態空間樹。3 構造約束函式 用於殺死節點 標準回溯模板 回溯演算法,複雜度較高,因為回溯演算法就是暴力窮舉,遍歷整顆決策樹是不可避免的 r...

47全排列二

題目 給定乙個可包含重複數字的序列,返回所有不重複的全排列。示例 輸入 1,1,2 輸出 1,1,2 1,2,1 2,1,1 思路 就是比46的全排列多了乙個去重的步驟 1.在回溯完成的時候是否要加進檔案的時候判斷 if ans not in res res加上ans 非常耗時,打敗15 的對手。2...