1
<code>使用之前需要声明一个combine的对象,调用startcombile方法,可返回想要的组合数或者个数,参数介绍很重要</code>
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
<code><br></code>
<code>public</code> <code>class</code> <code>combine {</code>
<code> </code><code>private</code>
<code>object[] oldarr;</code>
<code>object[] newarr;</code>
<code>list<object[]> list=</code><code>new</code>
<code>arraylist<object[]>();</code>
<code>int</code> <code>needlength;</code>
<code>int</code> <code>count;</code>
<code>boolean</code> <code>flag;</code>
<code> </code>
<code> </code><code>/**</code>
<code> </code><code>* 例如我要在5个数中取个,那么arr就是包含这五个的数组,needlength就是3</code>
<code> </code><code>* @param arr 要进行的数组</code>
<code> </code><code>* @param needlength 需要的个数</code>
<code> </code><code>* @param flag true代表返回一个list,list里包含了所有的组合情况;false代表返回一个数字,这个数字就是所有组合的个数</code>
<code> </code><code>* @return</code>
<code> </code><code>* 此方法为运行入口</code>
<code> </code><code>*/</code>
<code> </code><code>public</code>
<code>object startcombile(object[] arr,</code><code>int</code>
<code>needlength,</code><code>boolean</code>
<code>flag){</code>
<code> </code><code>this</code><code>.needlength=needlength;</code>
<code> </code><code>this</code><code>.oldarr=arr;</code>
<code> </code><code>this</code><code>.newarr=</code><code>new</code>
<code>object[needlength];</code>
<code> </code><code>this</code><code>.flag=flag;</code>
<code> </code><code>getcombineresult(</code><code>this</code><code>.oldarr.length,needlength);</code>
<code> </code><code>if</code><code>(flag){</code>
<code> </code><code>return</code>
<code>list;</code>
<code> </code><code>}</code><code>else</code><code>{</code>
<code>count;</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code>void</code> <code>getcombineresult(</code><code>int</code>
<code>sum,</code><code>int</code> <code>length){</code>
<code> </code><code>//5中3个 sum代表5,length代表3,因为递归,到最后肯定是n个里面取1个,当取1个的时候一层递归就结束了,会返回到上一层继续递归</code>
<code> </code><code>if</code><code>(length></code><code>0</code><code>){</code>
<code> </code><code>for</code><code>(</code><code>int</code>
<code>i=oldarr.length-sum;i<oldarr.length;i++){</code>
<code> </code><code>newarr[needlength-length]=oldarr[i];</code>
<code> </code><code>if</code><code>(length==</code><code>1</code><code>){</code>
<code> </code><code>if</code><code>(flag){</code>
<code> </code><code>object[] myarr=</code><code>new</code>
<code> </code><code>for</code><code>(</code><code>int</code>
<code>j=</code><code>0</code><code>;j<newarr.length;j++){</code>
<code> </code><code>myarr[j]=newarr[j];</code>
<code> </code><code>}</code>
<code> </code><code>list.add(myarr);</code>
<code> </code><code>}</code><code>else</code><code>{</code>
<code> </code><code>count++;</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>sum--;</code>
<code> </code><code>getcombineresult(sum,length-</code><code>1</code><code>);</code>
<code> </code><code>}</code>
<code>}</code>