深度遍歷實現全排列

2021-09-25 23:40:06 字數 700 閱讀 5600

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

示例:輸入: [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 ...