給定乙個沒有重複數字的序列,返回其所有可能的全排列。
示例:輸入: [1,2,3]
輸出:[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]思路:
1、用乙個陣列path來記錄此時生成的結果子集中,每個位置取陣列nums中的哪乙個下標
2、用idx表示在path中確定到哪一位了,當確定到第3位,然後進入下一層遞迴、發現idx >= 3時,說明已經生成了乙個結果子集,則放入ans中
3、因為陣列中有3個元素,在每一層的遞迴中、肯定需要逐個判斷每乙個元素是否被選中,所以需要乙個for迴圈,使用 i 來表示判斷到哪乙個元素了
**:
class
solution
ans.
add(temp)
;return;}
//i表示該層遍歷中、所選中的下標;陣列中有3個數、所以會挨個檢視0、1、2下標的數是否被訪問過,沒被訪問過、就可以被選中放入子結果集中
for(
int i =
0; i < nums.length; i++)}
}public list
>
permute
(int
nums)
}
next permutation 遍歷全排列
template bool next permutation bidirectionaliterator first,bidirectionaliterator last template bool next permutation bidirectionaliterator first,bidir...
全排列實現
參考的是 演算法競賽入門 p185 方法是用乙個額外的陣列a,不斷放入物件到這個陣列中,直到n個為止。include using namespace std int total 0 void permutation char s,char a,int n,int cur total cout end...
全排列(深度優先搜尋)
description 列出所有數字1到數字n的連續自然數的排列,要求所產生的任一數字序列中不允許出現得復數字。input 輸入 n 1 n 9 output 由1 n組成的所有不重複的數字序列,每行乙個序列。sample input 3 sample output 1 2 3 1 3 2 2 1 ...