首頁 >後端開發 >C#.Net教程 >求長為n的數中任m個數的組合

求長為n的數中任m個數的組合

巴扎黑
巴扎黑原創
2016-12-20 14:15:251604瀏覽

問題可分解為:
1. 先從n個數中選取編號最大的數,然後在剩下的n-1個數裡面選取m-1個數,直到從n-(m-1)個數中選取1個數為止。
2. 從n個數中選取編號次小的一個數,繼續執行1步,直到目前可選編號最大的數為m。
很明顯,上述方法是一個遞歸的過程,也就是說用遞歸的方法可以很乾淨俐落求得所有組合。

上代碼:

package algorithm.ms100;
public class CtzHe {
private int[] array = {1,2,3,4,5};
private int[] b= new int[3];
private int M = 3;
public void combine( int a[], int n, int m)
{ 
for(int i=n; i>=m; i--)   // 注意这里的循环范围
{
 b[m-1] = i - 1;
 if (m > 1)
 combine(a,i-1,m-1);
 else                     // m == 1, 输出一个组合
 {   
 for(int j=M-1; j>=0; j--)
 System.out.print( a[b[j]] + " ");
 System.out.println();
 }
}
}
public static void main(String[] args) {
CtzHe c = new CtzHe();
c.combine(c.array, 5, 3);
}
}


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn