讲解链接:代码随想录-回溯算法理论基础
77.组合
讲解链接:代码随想录-77.组合
剪枝操作有点难理解,需要多练习。
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> result = new ArrayList<>();
backtracking(n, k, 1, new ArrayList<>(), result);
return result;
}
void backtracking(int n, int k, int startIndex, List<Integer> paths, List<List<Integer>> result) {
if (paths.size() == k) {
result.add(new ArrayList<>(paths));
return;
}
for (int i = startIndex; i <= n - k + paths.size() + 1; i++) {
paths.add(i);
backtracking(n, k, i + 1, paths, result);
paths.remove(paths.size() - 1);
}
}