求组合数:求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]);
			}
		}		
	}
	
}

 

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