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