数学中组合的一种递归实现

来源:互联网 发布:北京网络职业学院图片 编辑:程序博客网 时间:2024/05/20 03:44

数学中组合的一种递归实现

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));    }}
原创粉丝点击