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

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述


在这里插入图片描述

2.思路

当前的元素可以重复使用。
(1)确定回溯算法函数的参数和返回值(一般是void类型)
(2)因为是用递归实现的,所以我们要确定终止条件
(3)单层搜索逻辑
二维数组存结果集,一维数组存放单一节点。
组合也就是收集路径的过程。
补充: toString():当你需要将对象转换为字符串形式(例如将对象内容拼接到其它字符串中),你可以显式调用 toString()。
原始类型:不能直接调用 toString(),但可以通过 Integer.toString(), String.valueOf() 等方法转换为字符串。

对象类型:可以调用 toString() 方法,将对象转为字符串。大多数 Java 内建类(如 String, List)已经重写了 toString() 方法来提供默认的字符串表示。你也可以在自定义类中重写 toString() 方法来提供自定义的字符串输出。

在这里插入图片描述

3.代码实现

import java.util.ArrayList;
import java.util.List;public class H39 {public List<List<Integer>> combinationSum(int[] candidates, int target) {int sum=0;List<List<Integer>> res=new ArrayList<>();List<Integer> cur=new ArrayList<>();backtracking(res,cur,candidates,target,0);return res;}public void backtracking(List<List<Integer>> res,List<Integer> cur,int[] candidates,int target,int startIndex){ // 终止条件:如果目标值为0,找到一个组合.检查的是当前组合的和是否等于 target,而不是当前组合的长度。if(target==0){//引用问题:cur 是引用类型,直接将它添加到 res 会导致多个组合之间共享同一个 cur 对象,后续的修改会影响已存储的组合。//副本问题:通过 new ArrayList<>(cur) 创建 cur 的副本,确保每个组合在存储时是独立的,不受后续递归的影响。res.add(new ArrayList<>(cur)); // 添加 cur 的副本}for(int i=startIndex;i<candidates.length;i++){int num=candidates[i];// 如果当前数字大于目标值,则跳过,因为之后的数字都更大if(num>target)continue;// 选择当前数字,加入到组合中cur.add(num);// 递归调用,目标值减去当前选择的数字
//            startIndex 确保每次递归都从当前索引开始,允许重复使用同一个数字。
//
//            每次递归调用时,目标值 target 减去当前数字 num,继续寻找符合条件的组合。backtracking(res,cur,candidates,target-num,i);//回溯cur.remove(cur.size()-1);}}public static void main(String[] args){H39 test=new H39();int[] candidates = {2,3,6,7};int target = 7;List<List<Integer>> ans=test.combinationSum(candidates,target);System.out.print(ans);}
}
http://www.xdnf.cn/news/12249.html

相关文章:

  • Python数据可视化科技图表绘制系列教程(四)
  • 好得睐:以品质守味、以科技筑基,传递便捷与品质
  • C++中`printf`格式化输出的实用案例和说明
  • 【项目实践】SMBMS(Javaweb版)(三)登出、注册、注销、修改
  • 成工fpga(知识星球号)——精品来袭
  • Firefox 134.0.1 Win64 版详细安装指南
  • 一些实用的chrome扩展0x01
  • React从基础入门到高级实战:React 实战项目 - 项目一:在线待办事项应用
  • 解锁日事清任务自定义字段功能:创建类型、配置字段与应用场景
  • day34- 系统编程之 网络编程(TCP)
  • Linux网络——socket网络通信udp
  • Unknown key: ‘auto_activate_base‘解决
  • C++笔记-C++11(一)
  • DeepSeek 赋能智能养老:情感陪伴机器人的温暖革新
  • DevExpress WinForms v24.2 - 新增日程组件、电子表格组件功能扩展
  • 压敏电阻的选型都要考虑哪些因素?同时注意事项都有哪些?
  • Vehicle HAL(7)--how client connect to Vehicle HAL?
  • Spring事务失效-----十大常见场景及解决方案全解析
  • Git Svn
  • 图像测试点列表
  • 如何实现本地mqtt服务器和云端服务器同步?
  • 基于责任链模式进行订单参数的校验
  • Flink 高可用集群部署指南
  • NuxtJS入门指南:环境安装及报错解决
  • 【Redis】类型补充
  • Oracle-高频业务表的性能检查
  • Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(七):消息框交互功能添加
  • 复变函数中的对数函数及其MATLAB演示
  • 人脸识别技术成为时代需求,视频智能分析网关视频监控系统中AI算法的应用
  • 残月个人拟态主页