如何實現全排列

2021-10-05 11:06:22 字數 1205 閱讀 5978

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

比如:輸入:[1

,2,3

]返回:[[

1,2,

3],[

1,3,

2],[

2,1,

3],[

2,3,

1],[

3,1,

2],[

3,2,

1]]

這個題目,人腦是很容易想出來解決辦法,用**來實現,就要用到回溯演算法,遞迴來實現。

這裡用深度優先遍歷,比如以1開頭的,第2個位置,可選擇的只有2或3,第3個位置,只剩下乙個,不用選了。

public list

>

permute

(int

nums)

deque path =

newarraydeque

<

>()

;// 遍歷的深度

boolean[

] used =

new boolean[len]

;// 記錄在某個序列中,元素是否被使用過。

dfs(nums,len,

0, path, used, res)

;return res;

}private

void

dfs(

int[

] nums,

int len,

int depth,deque path, boolean[

] used, list

> res)

for(

int i =

0; i < len; i++

)// 如前面的例子,第2個位置,假如放的是2,再次呼叫dfs,path中3會被放入。再呼叫一次,就進入return了。

path.

addlast

(nums[i]);

used[i]

=true

;dfs

(nums,len, depth +

1, path, used, res)

; path.

removelast()

;// 恢復所有的操作,

used[i]

=false;}

}

確實不好理解,但一旦想明白了,就不覺得難了。

如何通過python實現全排列

itertools模組現成的全排列 程式設計客棧 for i in itertools.permutations abcd 4 print join i 相關全排列演算法 def perm l if len l hdedvw 1 return l r for i in range len l s l...

全排列實現

參考的是 演算法競賽入門 p185 方法是用乙個額外的陣列a,不斷放入物件到這個陣列中,直到n個為止。include using namespace std int total 0 void permutation char s,char a,int n,int cur total cout end...

遞迴實現全排列

生成全排列的最簡單的遞迴方法的思想 1.可以把幾個數字分成前半部和最後一位。對於0123這四個數來說,最後一位 紅色字型 所出現的情況只有以下四類 先不管前三個數的排列組合情況 3 2 1 0這樣我們就把四個數字的排列問題,變成了3個 對於上述的每一行來說 2.終結條件是1個數字的排列就是其本身。直...