public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> res = new ArrayList<>();
if (n < 0 || k < 1) {
return res;
}
ArrayList<Integer> tmp = new ArrayList<>();
dfsHelper(tmp, res, 1, n, k);
return res;
}
private void dfsHelper(ArrayList<Integer> tmp, List<List<Integer>> res,
int start, int n, int k) {
if (k == tmp.size()) {// 取够k个了
res.add(new ArrayList<>(tmp));
return;
}
for (int i = start; i <= n; i++) {
tmp.add(i);
dfsHelper(tmp, res, i + 1, n, k);// 每个数字只取1次,下次 从i+1开始取
tmp.remove(tmp.size() - 1);
}
}