求組合數:求n個數(1...n)中k個數的組合

如:combination(5,3)

要求輸出:543,542,541,532,531,521,432,431,421,321

遞歸,當k等於1的時候進行輸出,

當第一個數選的5,則從剩下的4321中選2個數,即combination(4,2)

    第二個數選的4,則從剩下的321中選1個數,即combination(3,1),輸出543,542,541

    第二個數選的3,則從剩下的21中選1個數,即combination(2,1),輸出532,531

    第二個數選的2,則從剩下的1中選1個數,即combination(1,1),輸出521

當第一個數選的4,則從剩下的321中選2個數,即combination(3,2)

    第二個數選的3,則從剩下的21中選1個數,即combination(2,1),輸出432,431

    第二個數選的2,則從剩下的1中選1個數,即combination(1,1),輸出421

當第一個數選的3,則從剩下的21中選2個數,即combination(2,2)

    第二個數選的2,則從剩下的1中選1個數,即combination(1,1),輸出321

import java.util.ArrayList;

public class combination {
	static ArrayList<Integer> arrayList = new ArrayList<Integer>();
	public static void main(String[] args) {
		int n = 5;
		int k = 3;		
		int [] arr = new int [n+1];
		for(int i=0;i<=n;i++){
			arr[i] = i;
		}		
		Combination(n,k,arr);
	}

	private static void Combination(int n, int k,int arr[]) {		
		if(n<k||n<=0){
			System.out.println("error");
		}
		if(k==1){
			for(int i=n;i>0;i--){
				arrayList.add(arr[i]);
				System.out.println(arrayList);
				arrayList.remove((Object)arr[i]);
			}
		}
		if(k>1){
			for(int i=n;i>=k;i--){
				arrayList.add(arr[i]);
				Combination(i-1,k-1,arr);
				arrayList.remove((Object)arr[i]);
			}
		}		
	}
	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章