Categories
不学无术

[Java]计算组合

基本功不扎实,写了半天写出来。
输入:一个长度n数组,比如{0,1,3,5},以及m
输出:组合CNM
===============

/**
	 * 计算组合的
	 * @param input 输入的序号,如{0,1,2,3,5}
	 *
	 * @param m 抽取数量
	 * @return 输出为组合,比如{{0,1},{0,2},{1,2}}
	 */
	public static List ComputeCombines(int[] input, int m){
		List result = new ArrayList();
		for(int i=0; i prev_result = ComputeCombines(rest, m-1); //更细分的结果
			for(int[] results: prev_result){
				int[] temp = new int[results.length +1];
				System.arraycopy(results, 0, temp, 0, results.length);
				temp[temp.length-1] = currNumber;
				result.add(temp);
			}
		}
		return result;
	}
	/**
	 * 从输入序列中取出从index开始(不含)到末尾的元素
	 * @param input
	 * @param index
	 * @return 如果没得搞了返回null
	 */
	private static int[] getRest(int[] input, int index) {
		int result_size = input.length - index - 1;
		if(result_size <= 0)
			return null;
		int[] rest_array = new int[result_size];
		System.arraycopy(input, index +1, rest_array, 0, result_size);
		return rest_array;
	}
	public static void main(String[] args){
		///////////////
		//测试用
		int[] input = {0,1,2,3};
		List result = ComputeCombines(input, 2);
		for(int[] r : result){
			for(int entry : r){
				System.out.print(entry);
			}
			System.out.print("n");
		}
		///////////////
	}

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.