当前位置: 首页 > backend >正文

【代码随想录day 21】 力扣 216.组合总和III

视频讲解:https://www.bilibili.com/video/BV1wg411873x/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
力扣题目:https://leetcode.cn/problems/combination-sum-iii/

在这里插入图片描述
这道题的主要思路如上所示,如同上一篇文章说的一样,任何回溯算法题都可以抽象为二叉树,需要注意的点如下:

  1. 回溯完之后,需要更新sum并且弹出i。
  2. 因为这里取的是组合,所以不用往前遍历,直接再i+1~9范围中取值即可。
  3. 当sum已经大于targetsum后,说明不可能再等于了,直接剪枝。
  4. 当剩余数字的数量不足以填满path了,比如k=3,即path里最多3个数,现在path已经存入一个数7,那只有789这一种组合,如果已经存入8,只有89一种组合,永远填不满,直接剪枝,即for循环中,i<9-(k-path.size())+1。
class Solution {
private:vector<int> path;vector<vector<int>> result;void backtracking(int targetSum, int k, int sum, int startIndex){//剪枝if(sum > targetSum){return;}//判断终止条件if(path.size() == k){//如果sum=targetsum就存进去if(targetSum == sum){result.push_back(path);}}//回溯for(int i = startIndex; i <= 9-(k-path.size())+1;i++){//计算sumsum = sum + i;//i压入pathpath.push_back(i);//回溯backtracking(targetSum, k, sum, i+1);//回溯完毕,sum还原sum = sum -i;//回溯完毕,弹出path去找下一个path.pop_back();}}
public:vector<vector<int>> combinationSum3(int k, int n) {result.clear();path.clear();backtracking(n, k, 0, 1);return result;}
};
http://www.xdnf.cn/news/19408.html

相关文章:

  • CD73.【C++ Dev】map和set练习题1(有效的括号、复杂链表的复制)
  • Docker中Mysql容器忽略大小写
  • C语言————深入理解指针1(通俗易懂)
  • Linux-搭建NFS服务器
  • 【PyTorch】基于YOLO的多目标检测(一)
  • 【CNB.COOL】智能花卉分类系统 – 部署指北
  • 由题构造 嵌入汇编(汇编)
  • python调用豆包大模型给人脸生成卡通图像
  • 八大排序--快速排序
  • 福彩双色球第2025100期数据统计
  • hardhat 3 测试框架选择
  • linux系统学习(14.日志管理)
  • 华秋DFM检查PCB设计缺陷、一键导出Gerber、BOM、坐标文件
  • 第八章 光照
  • Qt QNetworkAccessManager 简述及例程
  • C++11——万能模板及完美转发
  • GMTapSDK 扩展使用文档
  • 【开题答辩全过程】以 基于springboot的垃圾分类管理系统为例,包含答辩的问题和答案
  • LSTM原理理解
  • 8.29学习总结
  • 大语言模型(LLM)简介与应用分享
  • Linux-数据库
  • 旅游景点库系统的设计与实现(代码+数据库+LW)
  • 力扣hot100:轮转数组(常规思路与三步反转讲解)(189)
  • mmaction安装的详细说明帖
  • 王立群《读史记-刘邦》读书笔记
  • 嵌入式C学习笔记之编码规范
  • 数学分析原理答案——第七章 习题12
  • AI大模型实战解析-RAG知识库+LangChain项目实战
  • Linux系统的进程管理