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

39.组合总和

       

        组合总和问题要求:给定一个数组,计算出所有能使数组元素之和等于目标值(targetSum)的子集组合。该问题与78. 子集 - 力扣(LeetCode)类似,区别在于需要在所有可能的子集中筛选出符合要求的组合。

解题思路可沿用78题的框架,通过递归实现选与不选的分类处理:

  1. 选择当前元素:递归调用dfs(i, candidates, targetSum - candidates[i])
  2. 不选当前元素:直接执行dfs(i, candidates, targetSum)

在回溯过程中需要注意:

  • 当targetSum减至0时,表示找到一个有效组合,将其加入结果集(ans)
  • 当targetSum小于0或已遍历完所有候选元素时,终止当前递归路径
  • 需要回溯,如果当前元素不满足,需要尝试其他方案
class Solution {
public:vector<vector<int>> ans;vector<int> path;void dfs(int i,vector<int>& candidates,int target) {if (target == 0) {ans.push_back(path);return;}if (i == candidates.size() || target < 0) {return;}dfs(i + 1,candidates,target);path.push_back(candidates[i]);dfs(i,candidates,target - candidates[i]);path.pop_back();}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {dfs(0,candidates,target);return ans;}
};

剪枝优化:对数组排序,如果targetSum 小于当前元素,后面元素只会更大,不能满足targetSum为0,提前结束递归

class Solution {
public:vector<vector<int>> ans;vector<int> path;void dfs(int i,vector<int> &candidates,int target) {if(target == 0) {ans.push_back(path);return;}if (i == candidates.size() || target < candidates[i]) {return;}dfs(i + 1,candidates,target);path.push_back(candidates[i]);dfs(i,candidates,target - candidates[i]);path.pop_back();}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {ranges::sort(candidates);dfs(0,candidates,target);return ans;}
};
http://www.xdnf.cn/news/636409.html

相关文章:

  • leetcode560-和为k的子数组
  • arxml文件
  • JVM 的类加载机制
  • 进程管理(第二、三、四章)
  • 【车用永磁同步电机随机开关频率控制策略:高频谐波抑制的工程实践】
  • Python入门手册:条件判断
  • 云原生安全之网络IP协议:从基础到实践指南
  • mysql都有哪些锁?
  • 历年北京理工大学保研上机真题
  • 分布式缓存:ZSET → MGET 跨槽(cross‐slot)/ 并发 GET解决思路
  • 第十九章:数据治理之数据指标(一):数据指标工具之【指标口径管理系统】与【指标数据查询系统】
  • AnyIOasyncio 现代化方法
  • Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
  • 李宏毅《机器学习2025》笔记 第二讲 —— AI Agent
  • Dubbo与OpenFeign的区别
  • Apache 高级配置实战:从连接保持到日志分析的完整指南
  • 用python实现中国象棋
  • Tool-Star新突破!RL赋能LLM多工具协同推理,性能全面超越基线方法
  • Linux的进程控制
  • 基于RedisBloom的JWT黑名单管理方案
  • 【2025】ubuntu22.04 docker安装全过程
  • Odoo 前端开发框架技术全面解析
  • Odoo: Owl Props 深度解析技术指南
  • Linux操作系统之进程(三):进程优先级与进程切换调度
  • npm幻影依赖问题
  • npm修改镜像的教程,将npm镜像修改为国内地址增加下载速度
  • SpringBoot-11-基于注解和XML方式的SpringBoot应用场景对比
  • 【微服务】SpringBoot 对接飞书审批流程使用详解
  • [Excel VBA]如何製作買三送一優惠條件的POS結帳介面?
  • 论文阅读笔记——Janus,Janus Pro