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();
}
}
}