news 2026/4/15 16:31:31

力扣-组合总和 III

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣-组合总和 III

思路分析

  1. 路径:当前已选的数字列表(比如 [1,2]);
  2. 选择列表:当前可选择的数字(为了去重,只选比上一个数字大的数,比如选了 1 之后只选 2-9,避免重复组合);
  3. 终止条件:
    • 路径长度 == k:若路径和 == n,加入结果集;否则直接返回;
    • 路径和 > n:提前剪枝(无需继续选数);
    • 剩余可选数字不足:比如已选 2 个数,还需选 3 个,但只剩 2 个数字可选,直接剪枝。
  4. 回溯逻辑:遍历选择列表,选一个数加入路径 → 递归 → 撤销选择(回溯)。

代码实现

// 保存最终结果List<List<Integer>>res=newArrayList<>();// 保存当前路径List<Integer>curPath=newArrayList<>();publicList<List<Integer>>combinationSum3(intk,intn){// 如果k大于n,直接返回空列表if(k>n){returnres;}// 回溯backtrack(1,0,k,n);returnres;}publicvoidbacktrack(intstart,intcurSum,intk,inttargetSum){// 如果当前和等于目标值,且长度为k,加入结果if(curSum==targetSum&&curPath.size()==k){res.add(newArrayList<>(curPath));return;}// 剪枝1:如果当前和大于目标值,直接返回if(curSum>targetSum){return;}// 剪枝2:如果当前路径长度加上可选的最大数还小于k,直接返回intremainCount=k-curPath.size();intremainNum=9-start+1;if(remainCount>remainNum){return;}// 开始遍历for(inti=start;i<=9;i++){// 选择curPath.add(i);curSum+=i;backtrack(i+1,curSum,k,targetSum);// 回溯curSum-=i;curPath.remove(curPath.size()-1);}}

代码关键部分解释

  1. 去重核心:start 参数控制每次选择的起始数字(比如选了 1 之后,下一轮只能选 2-9),避免出现 [1,2] 和 [2,1] 这样的重复组合。
  2. 剪枝优化(关键,提升效率):
  • 剪枝 1:当前路径和 > n,直接返回(比如选了 1+3=4,n=5 但还需选 1 个数,若下一个数选 2,和为 6>5,无需遍历);
  • 剪枝 2:剩余可选数字数量 < 还需选的数,直接返回(比如需要选 3 个数,当前从 8 开始选,只剩 8、9 两个数,不足 3 个,无需遍历)。
  1. 回溯状态恢复:递归后必须撤销选择(sum -= i + path.remove()),否则路径和状态会混乱。
  2. 结果集存储:new ArrayList<>(path) 是因为 path 是引用类型,直接添加会导致后续修改覆盖结果,需新建列表。

复杂度分析

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 19:26:40

蜜雪冰城 小程序 sign 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;部分python代码url "/api/v2/sho…

作者头像 李华
网站建设 2026/4/3 20:12:28

例说FPGA:可直接用于工程项目的第一手经验【3.7】

18.4 软件程序解析 1.main.c源文件软件程序解析 main.c的函数列表如表18-2所示。 表18-2 main.c文件的函数列表 2.int main(void)函数 主函数上电后稍作延时,主要是确保ADV7513芯片进入工作状态,接着给连接逻辑端hdmi_mode信号的PIO赋值,设置HDMI驱动的分辨率。代码中已经…

作者头像 李华
网站建设 2026/3/19 5:28:31

【Dubbo服务找不到?从抓耳挠腮到一键解决,全流程干货!】

作为一名天天和BUG贴贴的程序员&#xff0c;排查问题就像拆盲盒——你永远不知道下一个坑是逻辑bug、环境搞怪&#xff0c;还是同事偷偷改的配置让你当场破防。而最让人崩溃的&#xff0c;当属Dubbo服务找不到的坑&#xff01;就像你约了朋友吃饭&#xff0c;到地方发现人没影&…

作者头像 李华
网站建设 2026/3/26 6:19:11

【netty】EventLoop

eventloop 可以处理channel上 accept、read、write等io事件1.单线程执行器2.维护了一个selector如果传入线程数&#xff0c;则使用传入的线程数如果没有传入线程数&#xff0c;则获取配置的线程数 与 系统的cpu核数*2 比大小防。 止存在0线程的情况&#xff0c;所以与1比大小&a…

作者头像 李华
网站建设 2026/4/14 0:28:53

GLM-4.7-Flash参数详解:flash-attn2启用条件、量化选项与推理精度权衡

GLM-4.7-Flash参数详解&#xff1a;flash-attn2启用条件、量化选项与推理精度权衡 1. 模型基础认知&#xff1a;不只是“更快的GLM-4” 你可能已经听说过GLM-4系列&#xff0c;但GLM-4.7-Flash不是简单的小版本迭代。它是一次面向实际部署场景的深度重构——目标很明确&#…

作者头像 李华