力扣题/回溯/组合总和

embedded/2024/9/23 14:28:49/

组合总和

力扣原题

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

javascript">/*** @param {number[]} candidates* @param {number} target* @return {number[][]}*/
var combinationSum = function(candidates, target) {// 排序升序candidates.sort((a,b)=>a-b)const res = []function dfs(idx = 0, arr = [],sum = 0) {if(sum > target) return trueif(sum === target) {res.push(arr)return true}for(let i = idx; i < candidates.length; i++) {const num = candidates[i]const find = dfs(i, [...arr, num], sum + num)if(find) break // 和大于等于target时,后面的值一定大于target,不需要继续遍历了}}dfs()return res
};

解题思路

  1. 使用深度遍历
  2. 同一个数字可以无限制重复被选取,所以dfs深度遍历过程中,for循环每次都包含当前下标,当累加和sum 大于等于target时开始递归。
  3. 通过candidates进行升序排序,当for循环的当前结果累加和sum 大于等于target时,后面的值一定大于target,所以后面的循环不需要继续执行了。

http://www.ppmy.cn/embedded/103155.html

相关文章

Netlify 为静态站点部署 Waline 评论系统

目录 1 准备工作2 简介2.1 Netlify2.2 Waline2.3 Leancloud 3 开始搭建3.1 Fork 仓库3.2 设置 Leancloud3.3 部署 Netlify3.4 查看评论系统 从我建成个人网站以来&#xff0c;一个月了&#xff0c;竟然还没配置过评论系统&#xff0c;一直用的别人的 awa。 那么今天就稍微研究…

服务器多核多线程跟高主频的有何区别?

在服务器领域&#xff0c;多核多线程与高主频是两个重要的性能指标&#xff0c;它们各自在提升服务器性能上扮演着不同的角色。了解这两者的区别&#xff0c;对于选择合适的服务器以满足特定业务需求至关重要。 一、多核多线程的优势 多核多线程服务器指的是拥有多个处理器核心…

衡石科技BI的API如何授权文档解析

授权说明​ 授权模式​ 使用凭证式&#xff08;client credentials&#xff09;授权模式。 授权模式流程说明​ 第一步&#xff0c;A 应用在命令行向 B 发出请求。 第二步&#xff0c;B 网站验证通过以后&#xff0c;直接返回令牌。 授权模式结构说明​ 接口说明​ 获取a…

identYwaf:一款基于盲推理识别技术的WAF检测工具

关于identYwaf identYwaf是一款功能强大的Web应用防火墙识别与检测工具&#xff0c;该工具基于盲推理识别技术实现其功能&#xff0c;可以帮助广大研究人员迅速识别目标Web应用程序所使用的保护防火墙类型。 功能介绍 identYwaf所实现的盲推理通过检查一组预定义的测试性&…

C# while循环与do循环

学习循环语句之前&#xff0c;先学习跳转语句 continue语句&#xff1a;跳出当前循环&#xff0c;开始一次新的循环&#xff0c;并没有结束循环 break语句:立刻结束循环 while循环语句 while循环语句可以一次都不执行循环体 举例:制作一个小游戏&#xff0c;输入两个和为10…

常见的加解密算法

介绍 常见的加解密算法有&#xff1a;DES&#xff0c;3DES&#xff0c;AES&#xff0c;PBE&#xff0c;RSA&#xff0c;DSA&#xff0c;ECC&#xff0c;MD5&#xff0c;SHA&#xff0c;HMAC。 分类&#xff1a; 对称加密&#xff1a;DES&#xff0c;3DES&#xff0c;AES&…

云原生架构设计

目录 1、云计算 2、微服务 3、云原生 3.1、思维导图 3.2、特点 3.3、云原生架构的四类设计原则 3.4、12个过程阶段 4、管理 4.1、服务发现与负载均衡 4.2、持续集成与发布 4.3、日志收集与监控 4.4、安全性与权限管理 5、云原生应用过程 6、迁移上云原生架构 1、…

chapter08-面向对象编程——(Object类详解)——day09

目录 319-运算符 320-查看Jdk源码 321-子类重写equals 322-equals课堂练习1 323-equals重写练习2 324-equals重写练习3 325-hashCode 326-toString 327-finalize 319-运算符 引用的都是同一个地址&#xff0c;所以返回true 320-查看Jdk源码 equals只能判断引用类型是…