一、 77. 组合
题目连接:https://leetcode.cn/problems/combinations/
思路:回溯法
使用模板
void backtracking(参数) {
if (终止条件) {
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
处理节点;
backtracking(路径,选择列表); // 递归
回溯,撤销处理结果
}
}
class Solution {
private List<Integer> paths;
private List<List<Integer>> result;
private void backTracking(int n, int k, int startIndex) {
if (paths.size() == k) {
result.add(new ArrayList<Integer>(paths));
return;
}
//剪枝操作,k - paths.size() 还需要多少个
for (int i = startIndex; i <= n - (k - paths.size()) + 1; i++){
paths.add(i);
backTracking(n, k, i + 1);
paths.remove(paths.size() - 1);
}
}
public List<List<Integer>> combine(int n, int k) {
paths = new ArrayList<>();
result = new ArrayList<>();
backTracking(n,k, 1);
return result;
}
}
网友评论