概述
77. 组合
对着 在 回溯算法理论基础 给出的 代码模板,来做本题组合问题,大家就会发现 写回溯算法套路。
回溯三部曲:
- 确定递归函数参数
- 确定终止条件
- 单层搜索过程
本题关于剪枝操作是大家要理解的重点,因为后面很多回溯算法解决的题目,都是这个剪枝套路。
题目链接/文章讲解:代码随想录
视频讲解:带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili
//回溯三部曲
//明白递归时,return的含义
//剪枝
//LinkedList vs ArrayList; Initialization using another Collection
class Solution {
//新建List保存result
List<List<Integer>> result = new LinkedList<>();
//新建List保存每次得到的路径path
LinkedList<Integer> path = new LinkedList<>();
public List<List<Integer>> combine(int n, int k) {
backtracking(n, k, 1);
return result;
}
//定义回溯方法
private void backtracking(int n, int k, int startidx) {
//终止条件
if(path.size() == k) {
result.add(new LinkedList<>(path));
//结束当前程序,递归不再继续进行
return;
}
//for循环每次从startIndex开始遍历,然后用path保存取到的节点i
//控制树的横向遍历
//已经选择的元素个数:path.size();还需要的元素个数为: k - path.size();
//在集合n中至多要从该起始位置 : n - (k - path.size()) + 1,开始遍历
for(int i = startidx; i <= n - (k - path.size()) + 1; i++) {
//处理节点
path.add(i);
//递归
backtracking(n, k, i + 1);
//回溯, 撤销处理的节点
path.removeLast();
}
}
}
最后
以上就是炙热吐司为你收集整理的【代码随想录刷题笔记】DAY24 第七章 回溯算法的全部内容,希望文章能够帮你解决【代码随想录刷题笔记】DAY24 第七章 回溯算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复