JS全排列的幾種演算法

2021-10-23 13:19:10 字數 1096 閱讀 5823

這幾天遇到乙個問題。

問題描述:給定乙個字串,輸出該字串所有排列的可能。如輸入「abc」,輸出「abc,acb,bca,bac,cab,cba」

我們 都知道3個數字全排列一共有c3^3=6種方法,那麼怎麼實現呢?

var a=

[a,b,c]

;//swap用來交換陣列a中的兩個元素

function

swap

(a,p,q)

//全排列函式pai,在陣列a中,對p位置到q位置之間的元素進行全排列

function

pai( a, p, q)

//乙個數的全排列就是自己,輸出自己

else}}

pai(a,

0,a.length)

;

// 1、將第乙個位置分別放置各個不同的元素;

// 2、對剩餘的位置進行全排列(遞迴);

// 3、遞迴出口為只對乙個元素進行全排列。

function

swap

(arr,i,j)

}function

show

(arr)

function

perm

(arr)})

(0);

}perm([

"a",

"b",

"c"]

);

// 1、設定源陣列為輸入陣列,結果陣列存放排列結果(初始化為空陣列);

// 2、逐一將源陣列的每個元素鏈結到結果陣列中(生成新陣列物件);

// 3、從原陣列中刪除被鏈結的元素(生成新陣列物件);

// 4、將新的源陣列和結果陣列作為引數遞迴呼叫步驟2、3,直到源陣列為空,則輸出乙個排列。

var count=0;

function

show

(arr)

function

perm

(arr)

)(arr,

);}perm([

"a",

"b",

"c"]

);

演算法 全排列

從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。用演算法分別實現全排列,其中n個元素儲存在乙個長度為n的陣列中。實現全排列之前,先看一下對進行全排列的一種方法 從圖中可以看出,我們首先從n個元素中取出乙個元...

全排列演算法

1.遞迴全排列 分別將每個位置交換到最前面位,之後全排列剩下的位。遞迴全排列 1 2 3 4 5 1,for迴圈將每個位置的資料交換到第一位 swap 1,1 5 2,按相同的方式全排列剩餘的位 2.字典序全排列演算法 對給定的字符集中的字元規定了乙個先後關係,在此基礎上規定兩個全排列的先後是從左到...

全排列演算法

1.遞迴生成1 n的全排列 示例程式 include using namespacestd void print intn,int a,int cur int main int num while cin num int a 30 print num,a,0 return 0 void print ...