代码随想录算法训练营二十四天 第七章 回溯算法 77. 组合
77. 组合
class Solution {
List<List<Integer>> result = new ArrayList<>();
LinkedList<Integer> paths = new LinkedList<>();
public List<List<Integer>> combine(int n, int k) {
test(n, k, 1);
return result;
}
public void test(int n, int k, int startIndex) {
if (paths.size() == k) {
result.add(new ArrayList<>(paths));
return;
}
// 这个里面存在剪纸操作,就是说,需要四个,已经从1开始递归了,然后再从2继续开始,
//但是现在从2开始到最后就只有三个元素,不满足k的需求,所以就不需要继续往下执行for循环了。
for (int i = startIndex; i <= n - (k - (paths.size())) + 1; i++) {
paths.add(i);
test(n, k, i+1);
paths.removeLast();
}
}
}