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

【代码随想录day 22】 力扣 39. 组合总和

视频讲解:https://www.bilibili.com/video/BV1KT4y1M7HJ/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html#%E6%80%9D%E8%B7%AF
力扣题目:https://leetcode.cn/problems/combination-sum/

在这里插入图片描述
在这道题中,有几个难点,1.数组元素可以重复选择 2.返回结果不能有重复
因此这就带来一定的困难,所以我们要注意以下几点:

  1. 可以重复选择的话,选择一个元素后剩下的选择仍然是数组的全部
  2. 返回结果不能有重复的话,我们不会再往前去遍历元素
    因此在深入树的过程中,我们可选的范围是当前元素之后的所有元素(包含当前元素),如选择2后,可选范围为253,选择5后可选范围为53,选择3后,可选范围为3。
    还有一个注意的点就是剪枝,可以提升效率,我们可以把数组排列成有序的数组,如果在回溯过程中sum和大于target,那么这一层以及之后的都不用看了,肯定大于target,直接return就好。
class Solution {
private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex){//判断终止条件if(sum > target) return;if(sum == target){result.push_back(path);return;}//开始遍历for(int i = startIndex; i<candidates.size(); i++){//计算sumsum = sum + candidates[i];if(sum > target) return;//存入路径path.push_back(candidates[i]);//回溯遍历,因为从该路径自身到结尾可以继续遍历,所以从i开始回溯遍历backtracking(candidates, target, sum, i);//回溯完成,还原sum,弹出pathsum = sum - candidates[i];path.pop_back();}}
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {//初始化数组result.clear();path.clear();//排序数组sort(candidates.begin(), candidates.end());backtracking(candidates, target, 0, 0);return result;}
};
http://www.xdnf.cn/news/19324.html

相关文章:

  • 视频理解与行为识别全景综述
  • Multi-Head RAG: Solving Multi-Aspect Problems with LLMs
  • linux 内核 - 常见的文件系统介绍
  • AIA中断控制器IPI的Linux内核实现
  • Qt-Advanced-Docking-System: 一个基于 Qt 框架的高级停靠窗口系统
  • Spring boot注解介绍
  • Python 2025:AI代理、Rust与异步编程的新时代
  • BigDecimal账户分布式原子操作
  • IOT安全学习之IoT_Sec_Tutorial
  • 历史数据分析——寒武纪
  • Wi-Fi技术——MAC特性
  • 【人工智能99问】Qwen3中的QK归一化是什么?(34/99)
  • LeetCode 3459.最长 V 形对角线段的长度:记忆化搜索——就一步步试
  • 备份压缩存储优化方案:提升效率与节省空间的完整指南
  • 鸿蒙开发入门:ArkTS 运算符与分支循环全解析(含实战案例 + 避坑指南)
  • ES6 面试题及详细答案 80题 (13-21)-- 数组与字符串扩展
  • Zynq开发实践(FPGA之平台免费IP)
  • GitHub Spark深度体验:是革命前夜,还是又一个“大厂玩具”?
  • 浅层与深层语义分析的NLP进化论
  • libmodbus移植
  • spi总线
  • Python 实战:内网渗透中的信息收集自动化脚本(6)
  • 【Unity3D实例-功能-切换武器】切换武器(一)动画配置
  • FPGA CIC抽取滤波器设计
  • HarmonyOS 应用开发:基于API 12及以上的新特性与实践
  • TensorFlow 面试题及详细答案 120道(81-90)-- 其他框架/工具
  • 内核Sched调度关于find_idlest_cpu选核逻辑
  • OpenCV 图像处理实战与命令行参数配置:从轮廓检测到模板匹配
  • AI 重构内容创作:从文案生成到视频剪辑,创作者该如何与 AI 协同共生?
  • 一个投骰子赌大小的游戏