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

JAVA练习331- 组合总和

题目概览

给你一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有不同组合,并以列表形式返回。你可以按任意顺序返回这些组合。

candidates中的同一个数字可以无限制重复被选取。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为target的不同组合数少于150个。

示例 1:

输入:candidates = [2,3,6,7], target = 7输出:[[2,2,3],[7]]解释:2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。 7 也是一个候选, 7 = 7 。 仅有这两种组合。

示例 2:

输入:candidates = [2,3,5], target = 8输出:[[2,2,2,2],[2,3,3],[3,5]]

示例 3:

输入:candidates = [2], target = 1输出:[]

提示:

  • 1 <= candidates.length <= 30
  • 2 <= candidates[i] <= 40
  • candidates的所有元素互不相同
  • 1 <= target <= 40

来源:39. 组合总和 - 力扣(LeetCode)

解题分析

方法:回溯

令当前索引为 i,用集合 list 存储每次遍历得到的元素,每次递归时遍历数组 candidates,将元素加入 list 中,然后 target -= candidates[ i ],继续往下层遍历,
当 target == 0 时,存储 list 到最终结果中去;
当 target < 0 时,已没有可加的元素,直接返回;
当 target > 0 时,继续重复以上操作遍历+递归;
当下层遍历完成后,将当前元素移除 list,然后 target += candidates[ i ],继续遍历下一个元素,直到所有元素遍历完成,返回结果。

时间复杂度:O(S) ( S 为所有可行解的长度之和 )
空间复杂度:O(target)

class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> result = new ArrayList<>(); backTracking(candidates, target, result, new ArrayList<>(), 0, candidates.length); return result; } public void backTracking(int[] candidates, int target, List<List<Integer>> result, List<Integer> list, int index, int n) { if (target == 0) { result.add(new ArrayList<>(list)); return; } if (target < 0) { return; } for (int i = index; i < n; ++i) { list.add(candidates[i]); target -= candidates[i]; backTracking(candidates, target, result, list, i, n); list.remove(list.size()-1); target += candidates[i]; } } }
http://www.jsqmd.com/news/1253346/

相关文章:

  • go 整数的默认值0不传也是查询的解决方法
  • 高价回收黄金防坑指南,广州各区实体店铺地址罗列,出门变现先收藏 - 奢侈品回收评测
  • 人工智能大模型技术解析与实战指南
  • 上门取件旧衣服回收:2026年最高0.8元/公斤,爱宝拉一键预约包邮免费上门 - 快递物流资讯
  • LM93硬件监控芯片寄存器解析与SMBus通信实战指南
  • 深入解析MSP430 MPY32硬件乘法器:原理、模式与嵌入式DSP实战
  • 前端输入框焦点管理:解决回车键失焦的实战方案
  • 苏州长期零申报企业如何降低税务预警风险?
  • 精密时钟调理器设计:从PLL原理到PCB布局的工程实践
  • C++ Lambda表达式:从核心语法到现代编程实战全解析
  • 大模型后训练方法论:从原理到实践的SOLID框架
  • 智能诊断技术MSO算法:VMD-CNN-BiLSTM在工业预测性维护中的应用
  • C++实现ADFGX密码破解:模拟退火算法与古典密码分析实战
  • 告别数字囤积:从网盘收藏到高效知识管理的实用指南
  • 基于普通摄像头的人体无感定位技术解析
  • 空间智能交互框架:解决跨平台设备通信与协议适配难题
  • 离线AI核心技术解析与工业部署实战
  • AI论文写作工具实测:9款神器提升学术效率
  • 达州市黄金首饰回收,璟安黄金回收免费估价,即刻打款 - 新芸鼎珠宝首饰
  • LVDS接收器跨界应用:解决PECL/CMOS信号转换与时钟整形难题
  • 单图生成3D模型:深度学习颠覆传统建模流程
  • AnimateDiff Forge插件安装与优化全指南
  • 投资黄金去哪回收?宣城市璟安黄金回收专业靠谱 - 新芸鼎珠宝首饰
  • 论文降AI率工具对比:千笔与文途的技术原理与应用
  • AI音乐软件哪个好 2026国产写歌工具实测对
  • AI Agent如何变革软件开发项目管理
  • Function Calling与ReAct核心技术解析与应用指南
  • 大模型后训练:提升安全性与领域适配的关键技术
  • 2026秦皇岛装修公司推荐这3家:实用避坑指南帮你选到靠谱家装 - 装企精灵GEO
  • LLM Agent核心模块:记忆、工具调用与规划技术解析