39.组合总数

devtools/2024/9/20 9:20:10/ 标签: 算法, 数据结构, leetcode

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

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

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

:做题思考全过程

思路难点:想到传入这个idx参数,否则会出现res结果中出现重复的(顺序不同)list结果。

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> temp = new ArrayList<>();public List<List<Integer>> combinationSum(int[] candidates, int target) {backtrace(candidates, target, 0);return res;}// 将传入数组和当前需要的sum?// idx记录上一个递归增加的元素的下标,让本次遍历增加元素从这个下标开始public void backtrace(int[] candidates, int target, int idx){// 不能写一起,不让第一个条件判断不符合直接会执行下面语句,根本不会看第二个判断条件// 顺序错了,要先判断是否target符合条件,再判断直接去重if(candidates[idx] > target) return;// if(target < 0 || candidates[idx] > target) return;if(target < 0) return;if(target == 0){// 去重?if(!res.contains(temp)) res.add(new ArrayList(temp));return;}// candidates数组是递增的?// 不是递增的。不适合用下面语句剪枝优化// if(candidates[idx] > target) return;// 也可以先对candidates数组排序,再使用这个优化// for遍历candidates// 为了达到去重目的,不让i从0开始遍历。改为for(int i = idx; i < candidates.length; i++){temp.add(candidates[i]);backtrace(candidates, target - candidates[i], i);temp.remove(temp.size()-1);}}}

:默写一遍,加深印象

List<List<Integer>> res = new ArrayList<>();List<Integer> temp = new ArrayList<>();public List<List<Integer>> combinationSum(int[] candidates, int target){backtrace(candidates, target, 0);return res;
}public void backtrace(int[] candidates, int target, int idx){if(target < 0) return;if(target == 0) {res.add(new ArrayList(temp));return;}for(int i = idx; i < candidates.length; i++){temp.add(candidates[i]);backtrace(candidates, target - candidates[i], i);temp.remove(temp.size()-1);}
}


http://www.ppmy.cn/devtools/88158.html

相关文章

软件测试个人求职简历该怎么写,模板在这里

1、个人资料 姓名&#xff1a;xxx性别&#xff1a;x 手机号码&#xff1a;138888888xx邮箱&#xff1a;xxx 学历&#xff1a;本科专业&#xff1a;电子商务 英语&#xff1a;四级当前工作&#xff1a;测试工程师 从业时间&#xff1a;4年期望薪资&#xff1a;面议 求职意向软件…

广西南宁高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

南宁高校大学智能制造实验室&#xff0c;作为该地区乃至全国智能制造领域的重要研究和教学基地&#xff0c;一直致力于探索和创新智能制造技术。近日&#xff0c;该实验室的数字孪生可视化系统平台建设项目成功通过了验收&#xff0c;标志着其在数字孪生技术领域取得了重大突破…

红酒与烹饪:美食的灵感之源

在烹饪的广阔天地中&#xff0c;红酒常常作为一道神秘的佐料&#xff0c;为菜肴带来别样的风味与深度。当定制红酒洒派红酒&#xff08;Bold & Generous&#xff09;与烹饪艺术相遇&#xff0c;一场美食的灵感之旅便悄然展开。 一、红酒与烹饪的浪漫邂逅 在烹饪的世界里&…

Prometheus+Alertmanager+邮件告警

参考node_exporter-CSDN博客&#xff0c;球球不要断更&#xff01;&#xff01;&#xff01;&#xff01; 大致流程 1.部署promethus 可以写一个自定义的 systemd 服务启动文档&#xff0c;详情见自定义的 systemd 服务启动方式-CSDN博客 [rootlocalhost system]# sudo tee /e…

PHP命名空间

PHP 命名空间是 PHP 5.3.0 版本之后引入的一个重要特性&#xff0c;它提供了一种将相关的类、接口、函数和常量组合在一起的方式&#xff0c;以避免命名冲突&#xff0c;并更好地组织代码。以下是对 PHP 命名空间的详细教程&#xff1a; 一、命名空间的定义 使用 namespace 关…

射频工程师主要是干什么?

在硬件从业者中&#xff0c;有一部分从业者是专门负责射频&#xff0c;天线&#xff0c;基站信号相关工作内容的&#xff0c;他们也被称为射频工程师。并且相比与普通的硬件工程师&#xff0c;硬件测试工程师&#xff0c;专门做射频部分的射频工程师&#xff0c;相同年限下薪资…

GraphGNSSLib的RTKLIB——gnss_preprocessor.node的理解

gnss_preprocessor部分的理解&#xff0c;这是简单的几张流程图截图&#xff0c;自己的分析总结pdf在资源里&#xff0c;免费的&#xff0c;如果不占用大家资源可以下载&#xff0c;交流 整体的逻辑详见资源 &#xff0c;我承诺这是自己系统分析RTKLIB后&#xff0c;进行的…

【Spark计算引擎----第二篇(RDD):一篇文章带你清楚什么是RDD?RDD的概念,RDD的特性,怎么创建一个RDD,RDD的算子】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;本阶段和大家一起分享和探索大数据技术Spark—RDD&#xff0c;本篇文章主要讲述了&#xff1a;RDD的概念&#xff0c;RDD的特性&#xff0c;怎么创建一个RDD&#xff0c;RDD的算子等等。欢…

大学生算法高等数学学习平台设计方案 (第一版)

目录 目标用户群体的精准定位 初阶探索者 进阶学习者 资深研究者 功能需求的深度拓展 个性化学习路径定制 概念图谱构建 公式推导展示 交互式问题解决系统 新功能和创新点的引入 虚拟教室环境 数学建模工具集成 算法可视化平台 学术论文资源库 技术实现的前瞻性…

【智能制造-25】B样条和NURBS曲线

B样条和NURBS曲线各自的作用和应用场景 B 样条和 NURBS 曲线在许多领域都有重要的作用&#xff0c;下面分别介绍一下&#xff1a; B 样条曲线&#xff1a; 作用&#xff1a; 提供了一种灵活的方式来描述和控制曲线的形状。 可以局部修改曲线&#xff0c;即修改控制点的位置只会…

C++红黑树

目录 前言红黑树的概念红黑树的性质红黑树节点的定义红黑树结构红黑树的定义红黑树的插入操作&#xff08;1&#xff09;按照二叉搜索的树规则插入新节点&#xff08;2&#xff09;检测新节点插入后&#xff0c;红黑树的性质是否造到破坏【情况一】cur为红&#xff0c;p为红&am…

【秋招笔试】24-08-01-用友-秋招笔试题

🍭 大家好这里是清隆Coding ,一枚热爱算法的程序员 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 ⌚️ 01.物流网络安全节点 问题描述 L…

普元Devops学习笔记-devops对接jenkins提示crumb不可用问题

前言 普元devops需要对接jenkins&#xff0c;对接jenkins后&#xff0c;devops会调用jenkins的提供的API。 问题 新版本的jenkins提供跨域保护&#xff0c;即大名鼎鼎的CSRF问题。 因此&#xff0c;普元devops调用jenkins的时候&#xff0c;会出现跨域问题。 后台报错信息如…

日常更新dd

grubby --update-kernel ALL --args net.ifnames0 #禁止使用net.ifnames 让网卡显示名称为ethx DEVICEeth0 网卡名字 ONBOOTyes 网络服务启动自动激活网卡 BOOTPROTOdhcp 网卡工作模式 NAMEeth0 网络链接名称 DEVICEeth1 ONBOOTyes BOOTPROTOyes IPADDR1172.25.250.100 NE…

CoderGuide 程序员面试题库,打造全网最高质量题库

&#x1f920;仓库简介 CoderGuide是一个针对同学们前后端求职面试的开源项目&#xff0c;作为一名互联网/IT从业人员&#xff0c;经常需要搜索一些书籍、面试题等资源&#xff0c;在这个过程中踩过很多坑、浪费过很多时间。欢迎大家 Watch、Star&#xff0c;供各位同学免费使…

ZooKeeper中间件监控指标解读

监控易是一款功能全面的IT监控软件&#xff0c;能够实时监控各类IT资源和应用的状态&#xff0c;包括中间件、数据库、网络设备等。对于ZooKeeper这一重要的分布式协调服务中间件&#xff0c;监控易提供了详尽的监控指标&#xff0c;帮助用户全面了解ZooKeeper集群的运行状态。…

AI大模型需要什么样的数据?

数据将是未来AI大模型竞争的关键要素 人工智能发展的突破得益于高质量数据的发展。例如&#xff0c;大型语言模型的最新进展依赖于更高质量、更丰富的训练数据集&#xff1a;与GPT-2相比&#xff0c;GPT-3对模型架构只进行了微小的修改&#xff0c;但花费精力收集更大的高质量…

抖音视频素材一般都从哪里找?抖音视频素材库分享

在浏览抖音时&#xff0c;你是否曾被那些内容丰富、制作精良的视频所吸引&#xff1f;这些视频背后的秘密其实非常简单——高质量的视频素材。优质素材能够让你的视频更加出彩。然而&#xff0c;许多抖音内容创作者在初期可能会困惑&#xff1a;这些视频素材究竟从哪里获取呢&a…

嵌入式软件开发与AI整合

嵌入式软件开发与AI整合是当前技术发展的重要趋势之一。随着人工智能技术的快速发展&#xff0c;嵌入式系统越来越多地集成了AI算法&#xff0c;以实现更复杂的智能功能。以下是关于嵌入式软件开发与AI整合的详细分析&#xff1a; 一、整合背景 嵌入式系统是一种特殊的计算机…

深入探究 Vue.js 高级技术:从响应式系统到高效组件设计的实战指南

这里有一些实用的 Vue.js 高级示例&#xff0c;涵盖了前面提到的高级知识点&#xff0c;适合在实际项目中应用&#xff1a; 1. 自定义响应式数据 使用 Vue 3 的 customRef API 创建一个自定义的响应式输入框&#xff0c;带有防抖功能。 import { customRef } from vue;funct…