java中的排列组合

1
使用之前需要声明一个Combine的对象,调用startCombile方法,可返回想要的组合数或者个数,参数介绍很重要
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<br>
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);
            }
        }
    }
     
     
}

  

java中的排列组合,布布扣,bubuko.com

java中的排列组合

上一篇:关于计时器与多线程


下一篇:Java里String.split需要注意的用法