数学中组合的一种递归实现
import java.util.LinkedList;
import java.util.List;
class My {
public static List<List<Integer>> select(List<Integer> src,int count){
if(count==1){
List<List<Integer>> temp=new LinkedList<List<Integer>>();
for(int i=0;i<src.size();i++){
List<Integer> list=new LinkedList<Integer>();
list.add(src.get(i));
temp.add(list);
}
return temp;
}else{
List<List<Integer>> temp=new LinkedList<List<Integer>>();
for(int i=0;i<=src.size()-count;i++){
int first=src.get(i);
List<List<Integer>> tempResult=select(copyList(src,i+1),count-1);
for(List<Integer> cur:tempResult){
cur.add(first);
temp.add(cur);
}
}
return temp;
}
}
public static List<Integer> copyList(List<Integer> srcList,int startIndex){
List<Integer> newList=new LinkedList<Integer>();
for(int i=startIndex;i<srcList.size();i++){
newList.add(srcList.get(i));
}
return newList;
}
public static void printListofList(List<List<Integer>> listoflist){
for(List<Integer> list:listoflist){
for (int cur:list){
System.out.print(cur+" ");
}
System.out.println();
}
System.out.println("共"+listoflist.size());
}
public static void main(String[] argc){
List temp =new LinkedList();
temp.add(1);
temp.add(2);
temp.add(3);
temp.add(4);
temp.add(5);
printListofList(select(temp,3));
}
}