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

【代码随想录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.dtcms.com/a/360647.html

相关文章:

  • 2025年跨领域职业发展证书选择指南
  • 设计模式:外观模式(Facade Pattern)
  • [线上问题排查]深度剖析:一条MySQL慢查询的全面优化实战
  • 操作文件 File类
  • Linux网络编程04:网络基础(万字图文解析)
  • Day19_【机器学习—线性回归 (2)】
  • 【大模型记忆-Mem0详解-1】概述
  • springboot整合minio实现上传下载搭建minio
  • 【CVPR24-工业异常检测】InCTRL:少样本基于上下文残差学习的通才异常检测
  • 安装pthread man手册
  • 决策思维研究体系主要构成
  • B 站 “成分” 检测工具,深挖历史记录,秒测二次元浓度
  • OWASP Top 10漏洞详解
  • MCP(Model Context Protocol,模型上下文协议)介绍
  • 图像质量评价——结构相似度
  • CVPR上的多模态检索+视频理解,LLM助力提效翻倍
  • 基于Basilisk库实现三种姿态的切换
  • 雪花算法是什么,时钟回拨问题怎么解决?
  • 大厂文章学习《DDD在大众点评交易系统演进中的应用》
  • 【数据分享】安徽省四份土地利用矢量shp数据
  • C++ 数据结构之哈希表及其相关容器
  • LeetCode 3459.最长 V 形对角线段的长度:记忆化搜索——就一步步试
  • 【开题答辩全过程】以 家庭理财管理系统的设计与实现为例,包含答辩的问题和答案
  • mit6.031 2023spring 软件构造 笔记 Testing
  • 自定义创建Linux内核Tracepoint
  • git的子模块讲解
  • mmaction安装的详细说明帖
  • 【ArcGIS微课1000例】0150:如何根据地名获取经纬度坐标
  • 基于springboot的摄影器材租赁回收系统
  • 疯狂星期四文案网第56天运营日记