尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【递归、搜索与回溯算法必刷42题】暴力回溯算法:494. 目标和 + 39. 组合总和
个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《Linux操作系统编程详解》《笔试/面试常见算法从基础到进阶》《Python干货分享》⭐️为天地立心为生民立命为往圣继绝学为万世开太平 艾莉丝的简介文章目录暴力回溯专题494. 目标和 39. 组合总和知识图谱1 ~ 494. 目标和1.1 题目定义1.2 示例 11.3 暴力回溯两种实现1.3.1 方案 1全局变量存储路径和手动回溯恢复现场可能出现的代码上的问题标准代码性能隐患1.3.2 方案 2路径和作为 dfs 形参栈帧自动恢复现场原理说明标准代码1.4 核心结论2 ~ 39. 组合总和2.1 题目定义2.2 示例 12.3 两套暴力回溯解法2.3.1 解法一循环遍历元素原地重复选取核心逻辑标准代码2.3.2 解法二枚举当前数字选取 k 次核心逻辑标准代码2.3.3 小优化结尾暴力回溯专题494. 目标和 39. 组合总和知识图谱1494.目标和LeetCode 中等1.1题目定义1.2示例1.3暴力回溯两种实现方案1.3.1 全局变量记录路径和回溯手动恢复现场1.3.1.1 代码实现1.3.1.2 性能隐患1.3.2 路径和作为dfs参数自动恢复现场1.3.2.1 代码实现1.3.2.2 原理说明1.4核心结论239.组合总和LeetCode 中等2.1题目定义2.2示例2.3两套暴力回溯解法2.3.1 解法一循环枚举每个元素选/不选可重复选取2.3.1.1 代码实现2.3.1.2 核心逻辑说明2.3.2 解法二枚举当前元素选取k次2.3.2.1 代码实现2.3.2.2 现场恢复逻辑2.3.3 小优化点3全域审计错误清单修正方案4最终审计报告1 ~ 494. 目标和1.1 题目定义给定整数数组nums、整数target数组每个数字前添加或-拼接成表达式返回运算结果等于target的不同表达式数量。1.2 示例 1输入nums[1,1,1,1,1], target3输出55 种合法表达式-1111131-1111311-1113111-1131111-131.3 暴力回溯两种实现1.3.1 方案 1全局变量存储路径和手动回溯恢复现场可能出现的代码上的问题类成员变量未初始化多用例测试会出现脏数据无边界溢出注释代码缩进混乱语法排版不标准未说明超时根源全局变量读写 频繁现场回滚递归深度大时开销高。标准代码classSolution{private:intpathSum;// 全局路径和intres;// 合法方案总数intaimTarget;// 目标值缓存// pos当前处理数组下标voiddfs(vectorintnums,intpos){// 递归出口遍历完所有数字if(posnums.size()){if(pathSumaimTarget){res;}return;}// 选择 nums[pos]pathSumnums[pos];dfs(nums,pos1);pathSum-nums[pos];// 回溯恢复现场// 选择 -nums[pos]pathSum-nums[pos];dfs(nums,pos1);pathSumnums[pos];// 回溯恢复现场}public:intfindTargetSumWays(vectorintnums,inttarget){// 关键每次调用重置全局变量避免多组用例污染pathSum0;res0;aimTargettarget;dfs(nums,0);returnres;}};性能隐患全局变量读写伴随多次加减恢复操作数组长度较大时极易超时不推荐大数据场景。1.3.2 方案 2路径和作为 dfs 形参栈帧自动恢复现场原理说明每次递归传递path num/path - num每个递归栈帧独立保存当前和上层函数变量不受下层修改影响无需手动撤销操作。标准代码classSolution{private:intres;intaimTarget;// pos当前下标curSum当前分支累计和栈内局部变量voiddfs(vectorintnums,intpos,intcurSum){if(posnums.size()){if(curSumaimTarget){res;}return;}// 选加号新和传入下一层上层curSum不变dfs(nums,pos1,curSumnums[pos]);// 选减号新和传入下一层上层curSum不变dfs(nums,pos1,curSum-nums[pos]);}public:intfindTargetSumWays(vectorintnums,inttarget){res0;aimTargettarget;dfs(nums,0,0);returnres;}};1.4 核心结论整型路径和放函数参数代码简洁、无需手动回溯整型路径和设为全局变量必须手动加减恢复现场易超时暴力搜索仅适合小规模数组本题最优解法为 01 背包动态规划文档未涉及不额外扩展。2 ~ 39. 组合总和2.1 题目定义无重复元素数组candidates、目标值target数字可无限次选取返回所有和等于 target 的不重复组合。 判定组合不同选取数字数量不同即不同。2.2 示例 1输入candidates[2,3,6,7], target7输出[[2,2,3],[7]]2.3 两套暴力回溯解法2.3.1 解法一循环遍历元素原地重复选取核心逻辑dfs(candidates, i, sum candidates[i])递归下标仍为i允许重复选取当前数字递归结束后pop_back()撤销当前数字完成回溯。标准代码classSolution{private:intaim;vectorintpath;vectorvectorintresult;// pos起始枚举下标sum当前路径累加和voiddfs(vectorintcandidates,intpos,intsum){// 递归出口1和等于目标保存副本if(sumaim){result.push_back(path);return;}// 递归出口2和超过目标 / 下标越界直接返回if(sumaim||poscandidates.size()){return;}// 从pos开始遍历避免组合重复如[2,3]与[3,2]视为同一组合for(intipos;icandidates.size();i){path.push_back(candidates[i]);// i不变允许重复选取当前数字dfs(candidates,i,sumcandidates[i]);path.pop_back();// 回溯移除当前数字}}public:vectorvectorintcombinationSum(vectorintcandidates,inttarget){aimtarget;path.clear();result.clear();dfs(candidates,0,0);returnresult;}};2.3.2 解法二枚举当前数字选取 k 次核心逻辑循环k代表当前数字选取次数k0代表不选递归进入下一个下标pos1递归全部结束后批量弹出所有存入的数字恢复路径。标准代码classSolution{private:intaim;vectorintpath;vectorvectorintresult;voiddfs(vectorintcandidates,intpos,intsum){if(sumaim){result.push_back(path);return;}if(sumaim||poscandidates.size()){return;}// k当前数字选取次数k0不选intnumcandidates[pos];for(intk0;k*numaim;k){if(k!0){path.push_back(num);}dfs(candidates,pos1,sumk*num);}// 批量回溯弹出本次循环添加的所有numfor(intk1;k*numaim;k){path.pop_back();}}public:vectorvectorintcombinationSum(vectorintcandidates,inttarget){aimtarget;path.clear();result.clear();dfs(candidates,0,0);returnresult;}};2.3.3 小优化循环条件提前叠加已有 sum减少无效循环for(intk1;k*candidates[pos]sumaim;k)结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读艾莉丝努力练剑C/C Linux 底层探索者 | 一个正在努力练剑的技术博主【关注】跟随我一起深耕技术领域见证每一次成长。❤️【点赞】让优质内容被更多人看见让知识传递更有力量。⭐【收藏】把核心知识点存好在需要时随时查、随时用。【评论】分享你的经验或疑问评论区一起交流避坑不要忘记给博主“一键四连”哦“今日练剑达成”“技术之路难免有困惑但同行的人会让前进更有方向。”结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【递归、搜索与回溯算法必刷42题专题一】从汉诺塔问题到快速幂博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა
RELATED

相关推荐

Paperxie 毕业论文 AI 写作:分阶式创作体系,一站式化解毕业撰文各类难题

Paperxie 毕业论文 AI 写作:分阶式创作体系,一站式化解毕业撰文各类难题

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图毕业论文 - PaperXie智能写作PaperXieAi论文智能生成软件,10分钟生成万字毕业论文、期刊论文、文献综述、PPT,Aigc查重、降重报告、文献资料。只需一个标题,从开…

📅 2026/10/9 14:06:16
如何让AI看懂企业“业务语言”?从企业数据孤岛到统一认知引擎

如何让AI看懂企业“业务语言”?从企业数据孤岛到统一认知引擎

当一线业务人员试图向新接入的AI系统提出一个看似简单的请求,比如"帮我看看产品A123这周在产线上良品率情况怎么样?"时,经常会发生以下场景: AI理解不了"A123"这个产品编码具体指的是哪个物料号,…

📅 2026/10/10 12:25:13
爆火的Codex人人跟风试用?绝大多数科研人其实根本用不明白

爆火的Codex人人跟风试用?绝大多数科研人其实根本用不明白

近段时间,Codex刷屏各大科研交流平台,不少推文宣称它能一键处理实验数据、批量梳理文献、自动搭建基金分析脚本,仿佛一款工具就能包揽科研全部数字化工作。但大量实测反馈两极分化:生信、计算方向深耕代码的研究者直呼效率翻倍&am…

📅 2026/10/27 17:35:16
MORE NEWS

更多资讯

📰

电工证被人使用如何查 郑州报考避坑指南

电工证被人使用如何查 郑州报考避坑指南 之前考的证在外省能不能转过来?这个问题,我们漯河某中小施工企业的老王就遇到了。他拿着在老家考的低压电工证,到了郑州干活,却被甲方一查,说证书信息不对,根本查不到。老王当时就懵了——这证怎么就“被使用”…

📰

电工证鄂托克旗实操考试考什么?官方报名入口你一定要知道

电工证鄂托克旗实操考试考什么?官方报名入口你一定要知道 怕考不过白交培训费?别急,电工证鄂托克旗实操考试到底考什么,我来给你说清楚,帮你避坑。很多人报了电工证鄂托克旗培训,结果考试没过,钱花了不说,还耽误工作。其实,只要方法对,准备充分,通…

📰

电工证的头像怎么更换?官方报名入口你必须知道

电工证的头像怎么更换?官方报名入口你必须知道 学历不高怕报不上名?其实你不是一个人在战斗,很多人都和你有同样的担忧。今天咱们就来聊聊, 电工证的头像怎么更换 ,以及你真正关心的—— 官方报名入口…

📰

高压电工证有什么补贴 怎么报名最稳妥

高压电工证有什么补贴 怎么报名最稳妥 你现在就缺一张高压电工证,找工作处处碰壁,连面试资格都没。别急,今天咱们就来聊聊高压电工证有什么补贴,怎么报名最稳妥,还能帮你省下不少冤枉钱。 高压电工证的补贴政策你知道多少?…

📰

电工证广告视频真实经历:工地太忙根本没时间复习考试怎么办

电工证广告视频真实经历:工地太忙根本没时间复习考试怎么办 工地太忙根本没时间复习考试,我跟你说,这事儿我真经历过。去年刚拿到电工证,那会儿在安阳公路工程干活,每天早上五点起床,晚上十点才收工,中间吃饭的时间都紧张得很,哪还有时间看书复习?结…

📰

宜阳县电工证丢了怎么补办保姆级教程:缺证就缺饭碗,这份教程帮你稳稳上岗

宜阳县电工证丢了怎么补办保姆级教程:缺证就缺饭碗,这份教程帮你稳稳上岗 你是不是正愁着手上没电工证,找工作处处碰壁?宜阳县电工证丢了补办流程复杂又耗时,但要是不补,工作机会可能就溜走了。别急,这是一份保姆级的补办教程,帮你快速恢复证件,重新…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬