基本功不扎实,写了半天写出来。
输入:一个长度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");
}
///////////////
}