试题: 从a,b,c,b从随机抽取3个,打印其所有可能组合
import java.util.ArrayList;
import java.util.Arrays;
public class Combination{
public static void combinate(ArrayList<Character> alist,ArrayList<Character> blist,int length){
if(length==0){
for(int i=0;i<blist.size();i++){
ArrayList<Character> newblist=new ArrayList<Character>(blist);
newblist.add(blist.get(i));
System.out.print(newblist.get(i));
}
System.out.println();
}
if(length>=1){
for(int i=0;i<alist.size();i++){
ArrayList<Character> newblist=new ArrayList<Character>(blist);
newblist.add(alist.get(i));
ArrayList<Character> newalist=new ArrayList<Character>(alist);
for(int j=0;j<=i;j++){
newalist.remove(alist.get(i));
}
combinate(newalist,newblist,length-1);
}
}
}
public static void main(String[] args){
ArrayList<Character> al=new ArrayList<Character>(Arrays.asList('a','b','c','d'));
ArrayList<Character> bl=new ArrayList<Character>();
combinate(al,bl,3);
}
}
用两个集合不断递归,算是比较高明的算法之一,递归的思路这里用得很巧,出口是抽取的数目减少到0