排列與組合的Java遞迴實現

2021-08-31 12:45:26 字數 1214 閱讀 8529

我們在筆試面試過程中經常會遇到關於排列與組合的問題,其實這些可以通過遞迴簡單的實現,看下面兩個例子:

(1)關於字串排列的問題

輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串

abc,則輸出由字元a、

b、c所能排列出來的所有字串

abc、

acb、

bac、

bca、

cab和

cba。

可以這樣想:固定第乙個字元

a,求後面兩個字元

bc的排列。當兩個字元

bc的排列求好之後,我們把第乙個字元

a和後面的

b交換,得到

bac,接著我們固定第乙個字元

b,求後面兩個字元

ac的排列。現在是把

c放到第一位置的時候了。記住前面我們已經把原先的第乙個字元

a和後面的

b做了交換,為了保證這次

c仍然是和原先處在第一位置的

a交換,我們在拿

c和第乙個字元交換之前,先要把b和

a交換回來。在交換b和

a之後,再拿

c和處在第一位置的

a進行交換,得到

cba。我們再次固定第乙個字元

c,求後面兩個字元b、

a的排列。這樣寫成遞迴程式如下:

public class permutation 

if(i==ss.length)else

listlist=new arraylist();

for(int i=1;i<=chs.length;i++)

} //從字元陣列中第begin個字元開始挑選number個字元加入list中

public static void combine(char cs,int begin,int number,listlist)

if(begin==cs.length)

list.add(cs[begin]);

combine(cs,begin+1,number-1,list);

list.remove((character)cs[begin]);

combine(cs,begin+1,number,list);

} public static void main(string args);

combiantion(chs);

}}

參考:

字串的排列與組合 Java 遞迴實現

題目 輸入乙個字串,輸出該字串中字元的所有組合。例子 輸入 abc,它的組合有 a b c ab ac bc abc public class 字串子串行 char chars str.tochararray if chars.length 0 else public static void pri...

遞迴實現排列組合

置換 給定n大於等於1個元素的集合,列印這個集合所有可能的置換。我們通過觀察集合,得到生成所有置換的簡單演算法,以下是演算法的構造過程 1 a跟在 b,c,d 的所有置換之後。2 b跟在 a,c,d 的所有置換之後。3 c跟在 a,b,d 的所有置換之後。4 d跟在 a,b,c 的所有置換之後。in...

Java 遞迴實現組合

需求 乙個模型中有n個狀態,每個狀態有m個選項,如果從每個狀態中選取乙個選項進行組合,總共有多少種組合。1.state類 public class state public state public string getname public void setname string mname pu...