字符集的排列演算法 包括重排列

2021-05-25 05:45:20 字數 434 閱讀 7147

問題:輸入一串字元,每個字元都是唯一的,比如'a','b','c','d', 需要輸出這串字元的全部排列。

分析:根據排列原理,排列的可能性有n!種(n為字元的個數)。直覺上講,首先從字元集合中選取乙個字元,然後從剩下的字元中選取另外乙個字元,如此下去,直到所有字元用完為止。另外一種可能性是:先假設乙個子串已經排列好,比如abc,然後將下乙個字串d插入到已經排好的字串的兩邊和中間位置(這裡共有4個位置)。下面實現的是第一種演算法:

程式:

上面程式中語句used[i] = false; 非常重要,遞迴呼叫完畢需要重新標記該字元可用。這樣遞迴返回時可以在下乙個for迴圈中再次使用該字

符。例如如果當前迴圈的out為adb, 遞迴呼叫返回後字元c被標記為可用,這樣下一次for迴圈可以使用c,即out的下乙個值為adc。

如果有重複元素,以下是實現**:

演算法 字元全排列

public static void main string args private void test lenth chars.length rank chars for string s result public listresult new arraylist stringbuilder ...

演算法 字元全排列

1 遞迴實現字串的全排列 protected void page load object sender,eventargs e allarrangement strarray 全排列 遞迴實現 當前實現需要下一層返回支援 private arraylist allarrangement arrayl...

多重排列的幾道習題

今日心得 個人天資有限,比較認可學一門課一定要做習題,如果對某本書,某個領域想立體把握,深入 個人歸納 1 讀相關書 2 精讀 3 和適合的人交流。4 做問題。讀專業基礎書會遇到的問題,書難,讀書太慢,很難進入狀態,一般讀著讀著就容易懈怠,甚至不知所以然,這時候做習題看起來最痛苦但是最有效的。而且必...