news 2026/6/15 18:42:40

力扣-组合总和 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/6/15 11:05:58

蜜雪冰城小程序 sign

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

作者头像 李华
网站建设 2026/6/15 12:59:43

在无备份的本地电脑上用OpenClaw是有危险性的

我让Openclaw调用各种CLI大模型&#xff0c;对一个 15G的文件夹下的文件进行识别、分析&#xff0c;整理一份报告出来。 结果&#xff0c;它先把这个文件夹复制到工作区下&#xff0c;没跟我商量。 我无意间发现可用硬盘空间少了16G左右&#xff01;大吃一惊&#xff01;还好这…

作者头像 李华
网站建设 2026/6/15 12:22:02

中日一旦爆发战争,一天拿下日本现实吗?

中日一旦爆发战争&#xff0c;一天拿下日本现实吗&#xff1f;说句实话&#xff0c;真打起来&#xff0c;别说一天&#xff0c;就算拖上一整年&#xff0c;想稳稳压住都难如登天&#xff0c;这不是悲观&#xff0c;而是现实太硬&#xff0c;日本背后撑腰的不是别人&#xff0c;…

作者头像 李华
网站建设 2026/6/15 11:07:17

告别 Flaky Tests:Go 官方拟引入 testing/nettest,重塑内存网络测试标准

大家好&#xff0c;我是Tony Bai。在 Go 语言的测试哲学中&#xff0c;我们一直追求快速、稳定和可重复。然而&#xff0c;一旦测试涉及到 net 包——无论是 HTTP 服务、RPC 框架还是自定义协议——这种追求往往就会撞上现实的墙壁。我们通常面临两种选择&#xff1a;要么在 lo…

作者头像 李华
网站建设 2026/6/15 12:24:25

CANN hixl 对稀疏梯度传输的压缩与聚合支持原理

cann组织链接&#xff1a;https://atomgit.com/cann hixl仓库链接&#xff1a;https://atomgit.com/cann/hixl 前言在大规模分布式深度学习训练中&#xff0c;尤其是大语言模型&#xff08;LLM&#xff09;和推荐系统场景下&#xff0c;梯度张量往往呈现高度稀疏性——仅有少量…

作者头像 李华