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...