import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param k int整型 * @param n int整型 * @return int整型二维数组 */ private ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); private LinkedList<Integer> path = new LinkedList<>(); int[][] ans; public int[][] combination (int k, int n) { // write code here // k个数的组合,和是n,且不含有相同数字 // 递归嘛,参数为k,n,startIndex // 递归终结:和为n,或者说n = 0,放进结果中 // 单层逻辑:每层startIndex开始,<= 9,放进去,下一层 getCombine(k, n, 1); ans = new int[res.size()][k]; for (int i = 0; i < res.size(); ++i) { ArrayList<Integer> one = res.get(i); for (int j = 0; j < one.size(); ++j) { ans[i][j] = one.get(j); } } return ans; } private void getCombine(int k, int n, int startIndex) { if (k < 0 || n < 0) { return ; } if (k == 0 && n == 0) { System.out.println(path.getFirst()); System.out.println(path.getLast()); res.add(new ArrayList(path)); return ; } for (int i = startIndex; i <= 9; ++i) { path.add(i); getCombine(k - 1, n - i, i + 1); path.removeLast(); } } }