Leetcode JAVA刷刷站(39)组合总和

一、题目概述

二、思路方向

       为了解决这个问题,我们可以使用回溯算法来找到所有可能的组合,使得组合中的数字之和等于目标数 target。因为数组中的元素可以无限制地重复选择,所以在回溯过程中,我们不需要跳过已经选择的元素,而是可以从当前位置开始继续选择。

三、代码实现  

import java.util.ArrayList;  
import java.util.Arrays;  
import java.util.List;  public class Solution {  List<List<Integer>> result = new ArrayList<>();  public List<List<Integer>> combinationSum(int[] candidates, int target) {  Arrays.sort(candidates); // 对数组进行排序,有助于提前结束回溯  List<Integer> tempList = new ArrayList<>();  backtrack(candidates, target, 0, tempList);  return result;  }  private void backtrack(int[] candidates, int remain, int start, List<Integer> tempList) {  if (remain < 0) {  return; // 如果剩余需要达到的和已经是负数,则剪枝  }  if (remain == 0) {  result.add(new ArrayList<>(tempList)); // 如果剩余需要达到的和为0,则找到了一种符合条件的组合  return;  }  for (int i = start; i < candidates.length; i++) {  // 因为元素可以重复选择,所以我们不需要跳过已经选择过的元素  // 但可以通过排序和剪枝来避免不必要的搜索  if (i > start && candidates[i] == candidates[i - 1]) {  continue; // 跳过重复的元素,避免产生重复的组合  }  tempList.add(candidates[i]);  backtrack(candidates, remain - candidates[i], i, tempList); // 注意这里是从i开始,允许选择相同的数字  tempList.remove(tempList.size() - 1); // 回溯,撤销选择  }  }  public static void main(String[] args) {  Solution solution = new Solution();  int[] candidates = {2, 3, 6, 7};  int target = 7;  List<List<Integer>> combinations = solution.combinationSum(candidates, target);  for (List<Integer> combination : combinations) {  System.out.println(combination);  }  }  
}

执行结果: 

四、小结

       在这个解决方案中,我们首先对数组进行排序,这是为了在处理过程中能够更方便地进行剪枝和跳过重复元素。然后,我们使用一个递归函数 backtrack 来遍历所有可能的组合。在递归函数中,我们检查当前的和是否等于目标值,或者是否已经是负数(如果是负数则剪枝)。然后,我们遍历数组,从当前位置开始选择元素,并递归地调用 backtrack 函数,传入剩余需要达到的和、下一个开始的位置(允许选择相同的数字)、以及当前的组合列表。最后,在回溯过程中,我们需要撤销选择,以便尝试其他可能的组合。

       注意,在这个解决方案中,我们使用了 List<List<Integer>> 来存储所有可能的组合,并且使用 ArrayList 作为内部的临时列表来构建每个组合。在找到一种符合条件的组合时,我们通过创建一个新的 ArrayList 实例来将其添加到结果列表中,以避免在后续的回溯过程中修改已经添加到结果列表中的组合。

 结语 

只有流过血的手指

才能弹出世间的绝唱

!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403093.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yolov8交互式指定区域行人计数/车辆计数

使用 Ultralytics YOLOv8 进行区域计数 (视频推理) 区域计数是一种用于统计指定区域内物体数量的方法&#xff0c;当考虑多个区域时&#xff0c;这种方法能提供更为精细的分析。这些区域可以根据用户的需求进行调整&#xff0c;并且计数过程能够在实时视频中进行。 目录 装…

Ricardo Milos

目录 一、题目 二、思路 三、payload 四、思考与总结 一、题目 <!-- Challenge --> <form id"ricardo" method"GET"><input name"milos" type"text" class"form-control" placeholder"True" va…

顺丰科技25届秋季校园招聘常见问题答疑及校招网申测评笔试题型分析SHL题库Verify测评

Q&#xff1a;顺丰科技2025届校园招聘面向对象是&#xff1f; A&#xff1a;2025届应届毕业生&#xff0c;毕业时间段为2024年10月1日至2025年9月30日&#xff08;不满足以上毕业时间的同学可以关注顺丰科技社会招聘或实习生招聘&#xff09;。 Q&#xff1a;我可以投递几个岗…

c语言---文件

这一节我准备分三个部分来带领大家了解文件 ——一、有关文件的基础知识 ————二、文件的简单操作 ————————三、文件结束的判定 ————————————四、文件缓冲区 一、文件的基础知识&#xff1a; 首先在了解文件之前&#xff0c;我们需要了解C/C程序内存…

安卓相关环境配置

安卓相关环境配置 偶尔更新。。。 JEB&#xff08;动态调试好用&#xff09; JEB动态调试Smali-真机/模拟器&#xff08;详细&#xff0c;新手必看&#xff09; 夜步城 JADX官网&#xff08;静态分析&#xff09; https://github.com/skylot/jadx/releases/tag/v1.5.0 雷…

MATLAB多项式拟合

订阅专栏或下载资源可以获得源代码:https://download.csdn.net/download/callmeup/89632160 拟合和插值 拟合和插值是两种常见的数学方法,用于以某种方式近似或估计实际数据。 拟合是在给定一组已知数据点的情况下,通过选择一个合适的数学模型来拟合数据。拟合的目标是找到…

民航管理局无人机运营合格证技术详解

1. 证书定义与意义 民航管理局无人机运营合格证&#xff08;以下简称“合格证”&#xff09;是对符合民航法规、规章及标准要求的无人机运营单位或个人进行资质认证的重要证明。该证书旨在确保无人机运营活动的安全、有序进行&#xff0c;保护国家空域安全&#xff0c;维护公众…

Linux·权限与工具-yum与vim

1. Linux软件包管理器 yum 1.1 什么是软件包 在Linux下安装软件&#xff0c;一个通常的办法是下载到程序的源代码&#xff0c;并进行编译&#xff0c;得到可执行程序。但这样做太麻烦了&#xff0c;于是有些人把一些常用的软件提前编译好&#xff0c;做成软件包(可以理解成Win…

超有性价比深度学习卡特斯拉 P100,16G大显存,Stable Diffusion AI 绘画利器

超有性价比深度学习卡特斯拉 P100&#xff0c;16G大显存&#xff0c;Stable Diffusion AI 绘画利器 在当今数字化创作的时代&#xff0c;AI 绘画技术正以惊人的速度发展&#xff0c;为艺术家和创作者们带来了全新的可能性。而要实现高效的 AI 绘画&#xff0c;一款性能卓越的显…

Camera基础知识系列(5)——景深

目录 一. 前言 二. 景深 2.1 弥散圆 2.2 容许弥散圆 2.2 景深(DoF) 三. 如何控制景深 1. 光圈因素 2. 容许弥散圆因素 四. 总结 一. 前言 在摄影中&#xff0c;我们有时会有模糊背景、突出主体的需求&#xff0c;即背景虚化。如下图所示&#xff0c;左边是没有做背景虚化…

序列建模之循环和递归网络 - 递归神经网络篇

序言 在序列建模的广阔领域中&#xff0c;递归神经网络&#xff08; Recursive Neural Network, RNN \text{Recursive Neural Network, RNN} Recursive Neural Network, RNN&#xff09;&#xff0c;注意此处的 RNN \text{RNN} RNN与常用于序列处理的循环神经网络在命名上有所…

打包时未添加camera模块,请参考https://ask.dcloud.net.cn/arss/1ooticle/283

今天在app打包使用的时候突然发现app在拍照上传照片的时候遇到这个问题 遇到这种情况通常是因为app打包的时候manifestjson文件中App模块配置中的Camera&Gallery配置没有打开&#xff0c;点击相应选项勾选即可 然后再上传打包就好了! 哈哈哈好久没写博客了最近太忙了&…

使用 Hugging Face 和 Milvus 构建 RAG 系统

Milvus 是一个广受欢迎的开源向量数据库&#xff0c;为人工智能应用提供高性能和可扩展的向量相似性搜索。在本教程中&#xff0c;我们将向您展示如何使用 Hugging Face 和 Milvus 构建 RAG&#xff08;检索增强生成&#xff09;流程。 RAG 系统将检索系统与 LLM 相结合。该系统…

android13 禁用wifi

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 3.代码分析 3.1 代码位置1 3.2 代码位置2 3.3 代码位置3 4.代码修改 5. 彩蛋 1.前言 这个文章讲的是,在frameworks里面禁止打开wifi。 2.情况分析 我们打开wifi一般是 public static void turnOnWifi(Co…

x64汇编语言与逆向工程实战指南(四)

目录 1. 数组的存储与遍历1.1 编写数组数据写入内存1.2 汇编循环遍历数组元素 3. Lea指令4. mul指令与imul指令4.1 mul 指令4.2 imul 指令总结 5. div指令5.1 div 指令的基本原理5.2 8 位除法5.3 16 位除法5.3 32 位除法特点和要求 1. 数组的存储与遍历 1.1 编写数组数据写入内…

day28-lsync服务+scp命令

假设nfs服务器挂了&#xff0c;就要走backup服务器也部署nfs 这种情况下&#xff0c;rsync和nfs要用到同一个文件夹&#xff0c; 所以他俩管理文件夹权限必须一样 1. lsyncrsyncnfs rsync服务 10.0.0.41 1.安装rsync [rootbackup:~]#yum -y install rsync 2.配置rsync[root…

2024年8月18日历史上的今天大事件早读

648年8月18日 唐初名相房玄龄逝世 1850年8月18日 法国作家巴尔扎克逝世 1868年8月18日 英法天文学家发现“氦”元素 1905年8月18日 反清革命组织共进会成立 1914年8月18日 美国总统宣布在“一战”中保持中立 1925年8月18日 国民革命军正式组建 1926年8月18日 北伐军攻克汀…

Open3D 格网法计算点云的占地面积

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2数据显示 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一、概…

详解语义安全(semantically secure)

目录 一. 引入 二. 密文与明文 2.1 通俗性理解 2.2 定理 2.3 定理理解 三. 语义安全的第一个版本 3.1 基本理解 3.2 定理 3.3 定理理解 四. 语义安全的第二个版本 4.1 直观解释 4.2 小结 一. 引入 密码学中安全加密要求&#xff1a;敌手&#xff08;adversary&…

串(4/6)

目录 1. 串的概念及应用实例 1.1 串的定义 1.2 应用实例 2. 串的基本操作 2.1 创建和读取 2.2 串的拼接 2.3 串的比较 2.4 插入和删除 2.5 查找子串 3. 串的存储结构及实现 3.1 顺序存储结构 3.2 链式存储结构 3.3 存储结构的选择 4. 串的模式匹配算法 4.1 朴素匹…