輸出給定列表array的全部排列
利用遞迴思想將n階問題化簡為n-1階問題
面對列表[1,2,3],我們通常寫出全排列的方法為:寫出以1為開頭的排列[1,2,3],[1,3,2],再寫出以2為開頭的排列[2,1,3],[2,3,1]依次類推
故我們在面對3元素的列表時,我們是輪流取出元素作為頭,之後將其餘兩個元素全排列後放在第乙個元素後
所以我們可以知道全排列[x1,x2,x3,…,xn]時,我們會以x1作為頭部,在其後加上其餘元素即[x2,x3,…,xn]的全排列;再以x2作為頭部,在其後加上[x1,x3,…,xn]的全排列;直到以xn作為頭部,在其後加上[x1,x2,…,xn-1]的全排列
同時設定基線條件:當列表僅有乙個元素時,僅有一種排列
def
arrange
(array)
:#全排列陣列-通過遞迴
output =
iflen
(array)==1
:return
[array]
#當陣列只有乙個元素時直接返回該陣列
else
:#對於多個元素的陣列,全排列相當於以不同的元素首,並將其餘元素分全排列
# 例如全排列[1,2,3],相當於以1為頭部排列[2,3],以2為頭部排列[1,3],以3為頭部排列[1,2]
# 所以全排列為[1]+arrange([2,3]),[2]+arrange([1,3]),[3]+arrange([1,2])
# 推廣至n個元素的數列
# arrange([x1,x2,...,xn])為[x1]+arrange([x2,x3,...,xn]),[x2]+arrange([x1,x3,...,xn]),...,[xn]+arrange([x1,x2,...,xn-1])
for i in array:
subarr = array.copy(
) subarr.remove(i)
for j in arrange(subarr)
: newarr =
[i]+j
return output
遞迴演算法實現全排列
輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a,b,c所能排列出來的所有字串 程式如下 include using namespace std void swap char a,char b void permutation char str,int k,int m ...
全排列演算法遞迴實現
前言 在一些演算法題當中有時需要進行全排列,是乙個比較簡單的遞迴呼叫,在這裡記錄下,以後可以直接拿來使用。過程 例如 第一步 和的全排列組合 和的全排列組合 和的全排列組合 第二步 針對這個集合在拆分為 和的全排列組合 和的全排列組合 之後就是模擬如此。集合中每個元素和剩下元素的全排列的組合。在對這...
全排列遞迴演算法 C 實現
遞迴解決問題的方法就是將乙個大問題不斷分解成小問題,直到小問題很容易解決為止 先看全排列怎麼分解成小問題 假設要全排列 abc 先把a作為前部不變,全排列bc,同樣將b作為前部,全排列c,顯然是它本身 於是大問題變成了很容易解決的小問題了 如圖所示 如下 全排列演算法 遞迴實現 author rog...