求组合数:求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 arrayList = new ArrayList();
	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(n0;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]);
			}
		}		
	}
	
}

 

你可能感兴趣的:(数据结构和算法)