java中的排列组合

使用之前需要声明一个Combine的对象,调用startCombile方法,可返回想要的组合数或者个数,参数介绍很重要

public class Combine { private Object[] oldArr; private Object[] newArr; private List<Object[]> list=new ArrayList<Object[]>(); private int needLength; private int count; private boolean flag; /** * 例如我要在5个数中取个,那么arr就是包含这五个的数组,needLength就是3 * @param arr 要进行的数组 * @param needLength 需要的个数 * @param flag true代表返回一个list,list里包含了所有的组合情况;false代表返回一个数字,这个数字就是所有组合的个数 * @return * 此方法为运行入口 */ public Object startCombile(Object[] arr,int needLength,boolean flag){ this.needLength=needLength; this.oldArr=arr; this.newArr=new Object[needLength]; this.flag=flag; getCombineResult(this.oldArr.length,needLength); if(flag){ return list; }else{ return count; } } private void getCombineResult(int sum,int length){ //5中3个 sum代表5,length代表3,因为递归,到最后肯定是n个里面取1个,当取1个的时候一层递归就结束了,会返回到上一层继续递归 if(length>0){ for(int i=oldArr.length-sum;i<oldArr.length;i++){ newArr[needLength-length]=oldArr[i]; if(length==1){ if(flag){ Object[] myArr=new Object[needLength]; for(int j=0;j<newArr.length;j++){ myArr[j]=newArr[j]; } list.add(myArr); }else{ count++; } } sum--; getCombineResult(sum,length-1); } } } }

  

posted @ 2014-05-05 15:00  北异  阅读(538)  评论(0编辑  收藏  举报