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

杭州化工网站建设茶叶网站规划

杭州化工网站建设,茶叶网站规划,昆明做整站优化,建筑人才网人员工资回溯法经典练习:组合总和的深度解析与实战 引言 在算法世界里,回溯法(Backtracking)是解决 组合、排列、子集 等问题的神器。而 “组合总和”(Combination Sum) 问题,更是回溯算法中的经典代表…

回溯法经典练习:组合总和的深度解析与实战

引言

在算法世界里,回溯法(Backtracking)是解决 组合、排列、子集 等问题的神器。而 “组合总和”(Combination Sum) 问题,更是回溯算法中的经典代表,几乎是算法面试中的常客。

今天,我就带大家从 直觉理解代码实战,深入解析回溯法如何求解 组合总和,并给出代码详解,带你彻底吃透这个问题!


1. 题目解析

🔹 题目描述

给定一个 无重复元素 的正整数数组 candidates,以及一个目标值 target,找到所有可以使数字和为 target唯一组合

要求:

  • 同一个数字可以被无限次使用,但组合的顺序不影响结果(即 {2,2,3}{3,2,2} 视为相同组合)。
  • 结果集不能包含重复的组合。

示例:

输入: candidates = [2,3,6,7], target = 7
输出: [[2,2,3],[7]]
解释: 2+2+3 = 7, 7 = 7,因此答案是 [[2,2,3],[7]]

2. 直觉思考

这个问题的求解方式,可以类比 爬楼梯

  • 每次选择一个数(例如 2 或 3 或 6 或 7)。
  • 判断当前累加和是否等于目标值 target
  • 如果超过 target,则不合法,剪枝回溯。
  • 如果刚好等于 target,就加入结果集。

看到 “所有组合”“无序”“可以重复选择” 这些关键词,回溯法就是最佳选择!


3. 回溯算法核心框架

回溯法的核心思路是 “递归 + 回溯 + 剪枝”,通常分为以下几个步骤:

  1. 终止条件:当当前路径的总和等于 target,将其加入结果集。
  2. 选择操作:从 candidates 里选择一个数,尝试加入当前路径。
  3. 递归调用:累加该数后,继续探索下一个可能的组合。
  4. 回溯撤销选择:探索完该路径后,撤销最后一个选择,回溯到上一步继续尝试其他数。

回溯法的框架:

def backtrack(路径, 选择列表):if 满足结束条件:记录结果returnfor 选择 in 选择列表:做选择backtrack(路径, 选择列表)  # 递归撤销选择  # 回溯

4. 代码实战

🔹 Python 代码

from typing import Listdef combinationSum(candidates: List[int], target: int) -> List[List[int]]:res = []  # 结果集def backtrack(start, path, total):# 递归终止条件:找到一个满足条件的组合if total == target:res.append(path[:])  # 注意要拷贝 pathreturn# 遍历候选数组for i in range(start, len(candidates)):num = candidates[i]# 剪枝:如果 total + num 超过 target,则不再继续if total + num > target:continue# 选择当前数字,递归path.append(num)backtrack(i, path, total + num)  # 这里 `i` 而不是 `i+1`,因为允许重复选择path.pop()  # 回溯,撤销选择# 从索引 0 开始搜索backtrack(0, [], 0)return res

5. 代码详解

🔸 递归逻辑

  • backtrack(start, path, total)
    • start:控制递归深度,避免重复选择前面的数。
    • path:记录当前的组合路径。
    • total:当前路径的累加和。

🔸 关键点

  1. 循环遍历 candidates
    • start 位置开始,避免重复使用已选过的数。
    • 允许重复选择 candidates[i],所以 backtrack(i, ...) 而不是 backtrack(i+1, ...)
  2. 剪枝优化
    • total + num > target 时,提前终止递归,避免不必要的计算。
  3. 回溯撤销选择
    • 递归完一个分支后,撤销 path.append(num) 的选择,继续尝试其他数。

6. 测试代码

candidates = [2, 3, 6, 7]
target = 7
print(combinationSum(candidates, target))

输出结果:

[[2, 2, 3], [7]]

7. 复杂度分析

假设 candidates 长度为 N,目标值 target

  • 最坏情况下,回溯的搜索树是一个 N 叉树,高度为 target/min(candidates)
  • 时间复杂度 近似为 O(2^N)(指数级)。
  • 空间复杂度 近似 O(N)(递归栈空间 + 结果集存储)。

8. 进阶优化

🔹 剪枝优化

在搜索前 先对 candidates 排序,一旦发现 total + num > target,就可以提前停止当前分支,减少不必要的递归:

candidates.sort()  # 先排序,提高剪枝效率

🔹 记忆化搜索

如果 candidates 很多,可以用 字典(哈希表) 存储 target 计算结果,避免重复计算。


9. 结语

回溯法是组合问题的利器,而 “组合总和” 这个问题,是典型的 递归 + 剪枝 题目,掌握它,你就能轻松应对类似的算法题。

🔹 复习总结

  1. 回溯三步走:选择 -> 递归 -> 回溯
  2. 通过 start 参数避免重复i 位置不变以允许重复选取数字。
  3. 剪枝优化:如果 total + num > target,则立即跳过
  4. 理解递归树的结构,有助于更好地 Debug

文章转载自:

http://OWE5eZUp.nxbkw.cn
http://Bn4YJfFU.nxbkw.cn
http://AbTkmi0p.nxbkw.cn
http://aDpvUfSQ.nxbkw.cn
http://3mnpnjci.nxbkw.cn
http://34qPVGY1.nxbkw.cn
http://xdjeL6iC.nxbkw.cn
http://X1EZPX7I.nxbkw.cn
http://kVVClsDR.nxbkw.cn
http://7NFp9E9p.nxbkw.cn
http://SfgYwV7r.nxbkw.cn
http://LRMt7HkH.nxbkw.cn
http://AjvKxVTm.nxbkw.cn
http://julNoTCj.nxbkw.cn
http://E3ANEkwW.nxbkw.cn
http://75PFO7gh.nxbkw.cn
http://Ddx7Wkz7.nxbkw.cn
http://TuKHgvFX.nxbkw.cn
http://X59LXnH8.nxbkw.cn
http://41PJMZZM.nxbkw.cn
http://wpMMGt8W.nxbkw.cn
http://mety4t0M.nxbkw.cn
http://59Ygr7dD.nxbkw.cn
http://RdlgApoB.nxbkw.cn
http://lFTbzUeg.nxbkw.cn
http://LcHrHGV0.nxbkw.cn
http://3AAER3Ue.nxbkw.cn
http://BpylaZkV.nxbkw.cn
http://05zQ2ajC.nxbkw.cn
http://33gyHoXk.nxbkw.cn
http://www.dtcms.com/wzjs/767081.html

相关文章:

  • 网站后台怎么传图片企业营销型网站应该有哪些内容
  • 电子商务网站建设产品张艺兴粉丝做的网站
  • 公司网站 开源做pc端网站方案
  • iis7.5配置网站wordpress加字体颜色
  • 免费个人网站模版ps网站建设实习任务完成情况
  • 找人开发软件去什么网站php网站开发自学
  • 济南网站建设选聚搜网络一x昆明网站建设推广服务
  • 山西建设机械网站首页软件工程项目开发流程
  • 龙岩网站制作教程兼职网站建设
  • 什么是营销网站网站建设华网天下公司
  • 全新正版营销网站网站主题包括
  • 泉州建设银行网站平湖手机网站设计
  • 网站建设有哪些工作需需要筹备网店铺装修设计
  • 东莞教育团购网站建设网站会员体系
  • 企业建站系统营销吧tt团队dw做网站字体 别人 电脑
  • 备案 网站名称 重复wordpress入门主题
  • 网站服务器爆满怎么挤进去学网页设计哪个培训学校好
  • 淄博优化网站排名江门免费网站建站模板
  • 怎样弄网站的导航栏app公司开发价格
  • 长春火车站位置线上视频剪辑培训班
  • 网站优化设计公司wordpress 排除置顶
  • 用html制作简单的购物网站无货源电商软件app
  • 建筑网325英文外链seo兼职在哪里找
  • 网站备案多少钱国外主流网站开发技术
  • 如何申请建设网站首页四川省住房城乡建设厅网站
  • 校园服装网站建设演示文稿博优云软件官方网站
  • 室内设计培训机构排行windows优化大师官方下载
  • 珠海策划网站建设平台wordpress英文美食主题
  • 长沙网站建设宜兴做网站哪个好
  • 广州网站优化推广公司深圳好看的网站建设哪家公司好