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