组合总和-java

  • 题目描述: 

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

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

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

      • ​​​​​​​

 

  • 解题思想 : 

    • ​​​​​​​解题思想是使用回溯法(backtracking)。回溯法是一种递归搜索的方法,在搜索过程中不断尝试可能的解,并在不满足条件时进行回退。具体来说,该算法通过递归地尝试每个候选数字,并在满足条件时将当前的组合添加到结果列表中,然后继续递归搜索下一个数字。当搜索到的数字之和等于目标值时,将该组合添加到最终的结果列表中。在搜索过程中,通过对当前数字的多次使用来生成所有可能的组合。
  • 解题步骤 :

    • ​​​​​​​
    • 编写主函数和递归函数

      • 创建一个主函数,用于初始化算法的输入参数,并调用递归函数。
      • 编写一个递归函数,用于搜索所有可能的组合并将它们添加到结果列表中。
    • 递归函数的参数:

      • 结果列表:用于存储所有有效的组合。
      • 临时列表:用于暂时存储当前的组合。
      • 候选数字数组:提供可供选择的数字。
      • 剩余目标值:表示还需要凑齐的数字之和。
      • 起始索引:表示从候选数字数组的哪个位置开始搜索,避免重复搜索已经搜索过的数字。
    • 递归函数的终止条件:

      • 如果剩余目标值小于0,则说明当前组合无效,直接返回。
      • 如果剩余目标值等于0,则将当前临时列表添加到结果列表中,并返回。
    • 递归函数的核心逻辑:

      • 遍历候选数字数组,从起始索引开始逐个尝试添加数字到临时列表中。
      • 在每次递归调用后,需要将添加的数字从临时列表中移除,以便尝试其他可能的组合。
    • 主函数中的调用:

      • 在主函数中初始化候选数字数组和目标值,并调用递归函数。
      • 输出最终的结果列表。
    • 注意事项:

      • 在递归调用时,起始索引的更新:为了避免重复搜索已经搜索过的数字,需要将起始索引传递给下一层递归函数,并从该索引开始遍历候选数字数组。
      • 在递归调用后,需要将添加的数字从临时列表中移除,以便尝试其他可能的组合。

  • 以下是代码实现 : 
    • import java.util.*;public class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> result = new ArrayList<>();des(result, new ArrayList<>(), candidates, target, 0);return result;}private void des(List<List<Integer>> result, List<Integer> tempList, int[] candidates, int remain, int start) {if (remain < 0) return;if (remain == 0) {result.add(new ArrayList<>(tempList));return;}for (int i = start; i < candidates.length; i++) {tempList.add(candidates[i]);des(result, tempList, candidates, remain - candidates[i], i); // 注意这里的 start 是 i,而不是 i + 1,因为一个数字可以使用多次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>> result = solution.combinationSum(candidates, target);System.out.println(result);}
      }
      

       

    •      以上是本篇博客的全部内容, 感谢观看

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

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

相关文章

HTML常用的图片标签和超链接标签

目录 一.常用的图片标签和超链接标签&#xff1a; 1.超链接标签&#xff1a; 前言: 超链接的使用&#xff1a; target属性: 1)鼠标样式&#xff1a; 2)颜色及下划线: 总结: 2.图片标签&#xff1a; 前言: img的使用: 设置图片&#xff1a; 1.设置宽度和高度: 2.HTM…

C++心决之内联函数+auto关键字+指针空值

目录 7.内联函数 7.1 概念 7.2 特性 8. auto关键字(C11) 8.1 类型别名思考 8.2 auto简介 8.3 auto的使用细则 8.4 auto不能推导的场景 9. 基于范围的for循环(C11) 9.1 范围for的语法 9.2 范围for的使用条件 10. 指针空值nullptr(C11) 10.1 C98中的指针空值 7.内联…

R语言颜色细分

1.如何对R语言中两种颜色之间进行细分 2.代码&#xff1a; x <- colorRampPalette(c("#FC8D62","#FDEAE6"))(12) #打印向量值 # 按字典顺序排序颜色值 x_sorted <- sort(x,decreasing TRUE)# 打印排序后的颜色值 print(x_sorted)#展示颜色 scales:…

18.web 应用测试

每年必考&#xff1b; 考几个关键点&#xff1a; 1、计算通信量&#xff1b;给定并发多少、每个并发事务请求的量是多少、单位时间并发有多少个请求&#xff1b;计算吞吐量&#xff1b; 解&#xff1a;记公式&#xff1b;课上不讲&#xff0c;真题里有公式&#xff1b;比较容易…

解决Flutter应用在苹果商店上架中常见的问题与挑战

引言 Flutter是一款由Google推出的跨平台移动应用开发框架&#xff0c;其强大的性能和流畅的用户体验使其备受开发者青睐。然而&#xff0c;开发一款应用只是第一步&#xff0c;将其成功上架到苹果商店才是实现商业目标的关键一步。本文将详细介绍如何使用Flutter将应用程序上…

第十四章 MySQL

一、MySQL 1.1 MySql 体系结构 MySQL 架构总共四层&#xff0c;在上图中以虚线作为划分。 1. 最上层的服务并不是 MySQL 独有的&#xff0c;大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如&#xff1a;连接处理、授权认证、安全等。 2. 第二层的架构包括…

JWFD流程图转换为矩阵数据库的过程说明

在最开始设计流程图的时候&#xff0c;请务必先把开始节点和结束节点画到流程图上面&#xff0c;就是设计器面板的最开始两个按钮&#xff0c;先画开始点和结束点&#xff0c;再画中间的流程&#xff0c;然后保存&#xff0c;这样提交到矩阵数据库就不会出任何问题&#xff0c;…

MQ消息队列详解以及MQ重复消费问题

MQ消息队列详解以及MQ重复消费问题 1、解耦2、异步调用3、流量削峰4、MQ重复消费问题&#xff0c;以及怎么解决&#xff1f;4.1、重复消费产生4.2、解决方法&#xff1a; https://blog.csdn.net/qq_44240587/article/details/104630567 核心的就是&#xff1a;解耦、异步、削锋…

C#/WPF 使用开源Wav2Lip做自己的数字人(无需安装环境)

实现效果 Speaker Wav2Lip概述 2020年&#xff0c;来自印度海德拉巴大学和英国巴斯大学的团队&#xff0c;在ACM MM2020发表了的一篇论文《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild 》&#xff0c;在文章中&#xff0c;他们提出一个叫做Wa…

【R】Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包

Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包 此外: Warning message: package ‘parallel’ is a base package, and should not be updated 解决方法 缺少名为 foreach 的包&#xff0c;使用install.packages("foreach")将名为foreach 的包…

人脸、指纹、刷卡、密码、远程,一文速懂不同功能门禁系统怎么选?

门禁系统顾名思义就是对出入口通道进行管制的系统&#xff0c;它是在传统的门锁基础上发展而来。常见的门禁系统包括&#xff1a;密码识别门禁系统、刷卡识别门禁系统、生物识别门禁系统以及线上远程开门系统等。 在选择门禁系统时&#xff0c;需要根据不同的场景和需求&#x…

游戏引擎中的物理系统

一、物理对象与形状 1.1 对象 Actor 一般来说&#xff0c;游戏中的对象&#xff08;Actor&#xff09;分为以下四类&#xff1a; 静态对象 Static Actor动态对象 Dynamic Actor ---- 可能受到力/扭矩/冲量的影响检测器 TriggerKinematic Actor 运动学对象 ---- 忽略物理法则…

WordPress外贸建站Astra免费版教程指南(2024)

在WordPress的外贸建站主题中&#xff0c;有许多备受欢迎的主题&#xff0c;如Avada、Astra、Hello、Kadence等最佳WordPress外贸主题&#xff0c;它们都能满足建站需求并在市场上广受认可。然而&#xff0c;今天我要介绍的是一个不断颠覆建站人员思维的黑马——Astra主题。 原…

正则表达式(1)

文章目录 专栏导读1、match2、匹配目标3、通用匹配4、常用匹配规则表格 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN 数据分析领域优质创作者&#xff0c;专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》&#xff0c;本专栏针对大学生…

朱啕虎对中美AIGC差距的观点总结

根据访谈内容,我总结了以下5个主题,每个主题包含相关的观点: 中美在大模型和应用创新方面的差距 美国在大模型和应用创新方面更为领先中国在数据和应用场景方面优势明显美国的创新更多集中在"顶层"- 追求更高端的应用,如生成视频、电影等,但实现难度较大中国的AIGC…

Jamba: A Hybrid Transformer-Mamba Language Model

Jamba: A Hybrid Transformer-Mamba Language Model 相关链接&#xff1a;arXiv 关键字&#xff1a;hybrid architecture、Transformer、Mamba、mixture-of-experts (MoE)、language model 摘要 我们介绍了Jamba&#xff0c;一种新的基于新颖混合Transformer-Mamba混合专家&am…

Redis缓存穿透、击穿与雪崩及对应的解决办法

文章目录 Redis缓存穿透、击穿和雪崩一. 缓存穿透二. 缓存击穿三. 缓存雪崩 Redis缓存穿透、击穿和雪崩 图中的上半部分可理解为缓存雪崩&#xff0c;下半部分可理解为缓存穿透&#xff0c;接下来一起学习 一. 缓存穿透 概念 简而言之&#xff1a;数据查不到 用户想要查询一个…

如何优化TCP?TCP的可靠传输机制是什么?

在网络世界中&#xff0c;传输层协议扮演着至关重要的角色&#xff0c;特别是TCP协议&#xff0c;以其可靠的数据传输特性而广受青睐。然而&#xff0c;随着网络的发展和数据量的激增&#xff0c;传统的TCP协议在效率方面遭遇了挑战。小编将深入分析TCP的可靠性传输机制&#x…

“由于找不到opencv_world3413.dll,无法继续执行代码”的解决方法

问题 在Windows系统中&#xff0c;编译完涉及到opencv的项目后&#xff0c;提示&#xff0c; 由于找不到opencv_world3413.dll&#xff0c;无法继续执行代码 解决方法 在编译好的opencv的bin文件内&#xff08;如&#xff1a;D:\code\vs2017\opencv\build\x64\vc15\bin&…

HTMLCSS

前端入门 1、HTML&CSS 1、选择器 通配选择器 元素选择器 类选择器 id选择器 复合(组合) 选择器 交集选择器(且) <style> p.class {... } /* 元素选择器需在前面 */.class1.class2 {... } </style>并集选择器(或者) <style> .class1, .class2, …