Leetcode面试经典150题-39.组合总和

给你一个 无重复元素 的整数数组 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

组合总数系列题最简单的,这个还好,只要你会递归就行,啥回溯不回溯的都不重要,又不需要恢复现场,这个题重点是剪枝,其他的就不多说了,上代码,看不懂的请留言或者私信,收到第一时间解答

class Solution {/**这个题我准备使用最简单的回溯方法,定义函数dfs表示我们当前要尝试candidates的curIndex位置还有targetLeft的和需要凑出,一旦出现targetLeft为0的就加到结果里 */public List<List<Integer>> combinationSum(int[] candidates, int target) {/**数组长度比较小,先排个序*/Arrays.sort(candidates);return dfs(candidates, 0, target);}public List<List<Integer>> dfs(int[] candidates, int curIndex, int targetLeft) {List<List<Integer>> ans = new ArrayList<>();if(targetLeft < 0) {/**如果出现了小于0的情况,说明前面的过程错误,本次尝试无效 */return ans;}if(targetLeft == 0) {/**如果为0了说明这是一次成功的常识,返回添加空元素的ans */ans.add(new ArrayList<>());return ans;}/**如果targetLeft不是0但是没有数可以尝试了,也是失败的 */if(curIndex == candidates.length) {return ans;}/**当前数组按照从小到达排序,如果targetLeft小于当前数,则当前数及其后面的数不用再尝试,整体失败*/if(targetLeft < candidates[curIndex]) {return ans;}/**其他情况正常尝试,当前位置的数可以使用0~targetLeft/candicates[curIndex]次*/for(int num = 0; num <= targetLeft/candidates[curIndex]; num ++) {List<List<Integer>> ansNext = dfs(candidates, curIndex + 1, targetLeft - num * candidates[curIndex]);for(List<Integer> list : ansNext) {/**当前位置的数使用了多少个就加多少个,题目没有要求加在最前面建议直接add,否则使用list.add(0,candidates[curIndex])*/for(int i = 0; i < num; i++) {list.add(candidates[curIndex]);}ans.add(list);}}return ans;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

水墨风度——书圣故里书画名家晋京展亮相荣宝斋大厦

9月22日&#xff0c;由中国书画文化发展促进会、北京砚文化发展研究会、临沂市委宣传部、临沂市慈善联合总会等部门联合举办的“水墨风度——书圣故里书画名家晋京展”在北京市荣宝斋大厦开幕。 本次展览立足“弘扬优秀传统文化、繁荣文艺精品创作”&#xff0c;以“水墨风度”…

【5米光学卫星(资源一号02D/02E卫星)】

5米光学卫星&#xff08;资源一号02D/02E卫星&#xff09; 5米光学卫星&#xff0c;也被称为资源一号02D和02E卫星&#xff0c;是中国在高光谱遥感领域的重要成果&#xff0c;旨在提高自然资源的定量化调查监测能力&#xff0c;并支持国家各个领域的需求。以下是对这两颗卫星的…

Vue路由vue-router的简单用法

vue-router ‌Vue Router‌是Vue.js的官方路由管理器&#xff0c;用于构建单页应用中的页面路由。它提供了丰富的功能&#xff0c;包括路由定义、路由跳转、路由参数传递、嵌套路由等&#xff0c;使得开发者能够方便地管理应用的路由结构。 安装 npm install vue-routerDemo…

从零开始的软件开发详解:数字药店系统源码与医保购药APP

很多小伙伴们疑问&#xff0c;医保购药APP是如何开发的&#xff0c;今天我将从零数字药店系统源码开始为大家提供一条清晰的实现方案。 一、技术架构设计 在开发医保购药APP之前&#xff0c;首先需要明确技术架构。一般来说&#xff0c;APP的技术架构可以分为前端和后端。 1…

CS创世8GB SD NAND的低功耗特性

在电子设备不断追求低功耗的今天&#xff0c;CS创世半导体的8GB SD NAND芯片以其低功耗特性脱颖而出。这款芯片的读写电流仅为15mA&#xff0c;相较于同类产品&#xff0c;其功耗显著降低&#xff0c;这不仅延长了设备的使用时间&#xff0c;还减少了对电池的依赖。这种低功耗特…

828华为云征文|Flexus云服务器X实例:在Docker环境下搭建java开发环境

828华为云征文&#xff5c;Flexus云服务器X实例&#xff1a;在Docker环境下搭建java开发环境 引言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 主要使用场景 二、购买Flexus云服务器X实例2.1 购买规格参考2.2 查看Flexus云服务器X实例状态 三、远程连接Flexus云…

Q必达任务脚本

文章目录 1.购买服务器地址2.部署教程3. 代码如下4. 如何联系我 1.购买服务器地址 服务器购买地址 https://t.aliyun.com/U/rUHk58 若失效&#xff0c;可用地址 https://www.aliyun.com/activity/wuying/dj?source5176.29345612&userCode49hts92d 2.部署教程 2024年最…

了解法国游戏玩家:应该知道的关键见解

随着中国开发商向全球市场扩张&#xff0c;了解不同地区游戏玩家的偏好和行为至关重要。法国拥有丰富的游戏文化&#xff0c;呈现了一个独特的市场&#xff0c;开发商必须考虑这些独特的功能才能取得成功。以下是中国开发者应该注意的法国游戏玩家的关键特征&#xff1a; 偏好…

VmWare安装虚拟机教程(centos7)

VMWare下载&#xff1a; 下载 VMware Workstation Pro - VMware Customer Connect 安装包&#xff1a;&#xff08;16的版本&#xff09;免费&#xff01;&#xff08;一个赞就行&#xff09; 一直点下一步即可&#xff0c;注意修改一下安装位置就好 二、安装虚拟机 安装虚…

【Java】虚拟机(JVM)内存模型全解析

目录 一、运行时数据区域划分 版本的差异&#xff1a; 二、程序计数器 程序计数器主要作用 三、Java虚拟机 1. 虚拟机运行原理 2. 活动栈被弹出的方式 3. 虚拟机栈可能产生的错误 4. 虚拟机栈的大小 四、本地方法栈 五、堆 1. 堆区的组成&#xff1a;新生代老生代 …

Redis: 特点,优势,与其他产品的区别以及高并发原理

入门Redis概述 1 &#xff09;选择Redis是因为其高性能 因为 Redis 它数据存储的机制是存在内存中的&#xff0c;减少了传统关系数据库的磁盘IO它是单线程的保证了原子性&#xff0c;它还提供了事务&#xff0c;锁等相关的机制 2 &#xff09;Redis 环境安装配置 linux 或 d…

【Python-GUI图形化界面-PyQt5模块(3)】——Qwidget核心模块

本文旨在带大家学习Python中的一种GUI图形化界面模块——PyQt5模块&#xff0c;将为大家详细了解PyQt5模块中函数的参数和使用&#xff1a; 一、PyQt5简介 PyQt是Qt框架的Python语言实现&#xff0c;由Riverbank Computing开发&#xff0c;是最强大的GUI库之一。 官方网站&a…

Qt-QSpinBox输入类控件(32)

目录 描述 属性 信号 使用 描述 微调框&#xff0c;如下&#xff0c;运行用户进行细微数据的操作&#xff0c;点击按钮&#xff0c;数据就会发生 “微调” 属性 value存储的数值.singleStep每次调整的"步⻓".按下⼀次按钮数据变化多少.displayInteger数字的进制…

云服务器是干什么的?

随着云计算的发展&#xff0c;云服务器的功能逐步完善。但是还有不少用户不清楚云服务器是干什么的&#xff1f;云服务器提供了一种灵活、可扩展的计算解决方案&#xff0c;适用于各种在线业务和项目。提供虚拟化的计算资源是云服务器最基本也是最重要的功能。 云服务器是干什…

leetcode第169题:多数元素

给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;3 示例 …

内置函数sorted()与方法sort()的区别、内置函数reversed()与方法reverse()的区别

1、内置函数sorted()与方法sort() #内置函数sorted()与方法sort()的区别 #定义一个列表ls ls[4,3,6,7,9] print(sorted(ls)) print(ls)#sorted函数不会改变原列表的顺序&#xff0c;它只是生成了一个新列表&#xff08;临时排序&#xff0c;不会改变与列表顺序&#xff09; pr…

ARM单片机的内存分布(重要)

ARM单片机的内存分布&#xff08;重要&#xff09; 一、S32K344的内存布局 MEMORY {int_pflash : ORIGIN 0x00400000, LENGTH 0x003D4000 /* 4096KB - 176KB (sBAF HSE)*/int_dflash : ORIGIN 0x10000000, LENGTH 0x00020000 /* 128KB …

MySQL 缓冲池管理与常见优化技巧

在 MySQL 数据库的性能优化中&#xff0c;缓冲池的管理至关重要。同时&#xff0c;了解其他常见的优化技巧也能极大地提升数据库的运行效率。今天&#xff0c;我们就来深入探讨在 MySQL 中如何管理并调整缓冲池的大小&#xff0c;以及一些常见的优化技巧。 一、缓冲池的重要性…

关于 NLP 应用方向与深度训练的核心流程

文章目录 主流应用方向核心流程&#xff08;5步&#xff09;1.选定语言模型结构2.收集标注数据3.forward 正向传播4.backward 反向传播5.使用模型预测真实场景 主流应用方向 文本分类文本匹配序列标注生成式任务 核心流程&#xff08;5步&#xff09; 基本流程实现的先后顺序…

harmonyOS ArkTS最新跳转Navigation

文章目录 取消标题栏初始页面(load)设置为竖屏 自定义标题Tabs&TabContentTabs通过divider实现了分割线各种属性 图片下载 官方文档 Entry Component struct Index {State message: string Hello WorldState djs:number 5build() {Column(){Navigation(){}.title("g…