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>