全排列是我們讀書時課堂上已經學過東西,給出1,2,3三個數,有多少個組合方式呢?
123,132,213,231,312,321
很快我們就能給出這組數的全排列,全排列個數=n*(n-1)*(n-2)*…*1=n!
看起來很easy,我以為**實現起來分分鐘的事情,然後並沒有
這是我一口氣寫完的**,輸出卻什麼都沒有
vectorint>
>
permutation
(vector<
int> num_list)
}return d_list;
}
最後發現,當輸入乙個空列表時,返回乙個空列表,最後在for (int j = 0; j < temp_list.size(); j++)時,沒有得到插入當前前值。修改後我們看下
vectorint>
>
permutation
(vector<
int> num_list)
for(
int i =
0; i < num_list.
size()
; i++)}
return d_list;
}int
main
(int argc,
char
*ar**)
}printf
("\n");
return0;
}/* 輸出結果:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
*/
46 全排列(無重複數字)
這是無重複數字的全排列。注意遞迴函式中的迴圈 迴圈起始位置 和used陣列的使用 class solution void dfs int nums for int i 0 i還學習了交換法,不用申請used陣列。但是看了看,好像空間也沒節省多少啊。可能是因為為了轉換成list要將int轉換成inte...
DFS有重複數字的全排列
此文寫於2017 11 25 全排列就不說了,乙個next permutation就解決了。但是有重複的數字還能用基本的全排列嗎?答案顯然是不能的,我們需要一些語句來幫助我們避免重複。讓我們結合 來分析 有重複的全排列 include include using namespace std cons...
非重複組合排列(含重複數字時,生成不重複組合排列)
sample input 1 2 2 3 sample output 分析資料 這裡和不含重複資料生成全組合排列 是不同的,如果使用原 會出現重複的資料,主要原因是在遞迴的時候,會把那些重複的數字當作不同的數字利用,而平等對待,直接進行遞迴。我們要做的就是把相同的數區分出來,我們這裡可以引入乙個陣列...