一天一大 lee(组合总和)难度:中等-Day20200909
时间:2022-07-25
本文章向大家介绍一天一大 lee(组合总和)难度:中等-Day20200909,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
- 所有数字(包括 target)都是正整数。
- 解集不能包含重复的组合。
示例:
- 示例1
输入:candidates = [2,3,6,7], target = 7,
所求解集为:
[
[7],
[2,2,3]
]
- 示例2
输入:candidates = [2,3,5], target = 8,
所求解集为:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
提示:
- 1 <= candidates.length <= 30
- 1 <= candidates[i] <= 200
- candidate 中的每个元素都是独一无二的。
- 1 <= target <= 500
抛砖引玉
抛砖引玉
思路
本题原前面day-08: 组合 (难度:中等)逻辑基本一致
只是组合种是选定k个元素,本题是要求元素和为target,本题新增的特性允许元素重复
区别引起的逻辑变化:
- 如果要预先求剩余元素的和对优化递归收益其实就没有那么可观了,依旧采用指针越界来约束递归
- 可以重复出现,则选择某元素,之后可能还要选择,则索引位不变让该元素参与后面的递归
递归:
- 参数:
- 枚举分支的指针
- 枚举分支的中间组合数组
- 枚举分支的中间组合数组和
- 终止:
- 组合数组元素和等于 target
- 枚举指针越界
/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/
var combinationSum = function(candidates, target) {
let _result = []
function dfs(i, item, sum) {
if (i >= candidates.length) return
if (sum === target) {
_result.push(item)
return
}
dfs(i + 1, item, sum)
if (target - sum - candidates[i] >= 0) {
// 注意一个元素可以重复出现,则索引位不变
dfs(i, [...item, candidates[i]], sum + candidates[i])
}
}
dfs(0, [], 0)
return _result
};
- Oracle数据库性能障碍分析利器:SYSTEMSTATE DUMP介绍
- hdu ---(4517)小小明系列故事——游戏的烦恼(Dp)
- HTTP加速器varnish安装小记(1)
- 手把手教你估算深度神经网络的最优学习率(附代码&教程)
- 批处理判断第一个硬盘的最后一个分区并进入
- MVCC原理探究及MySQL源码实现分析
- 关于热点数据导出与加载的影响,多的是你不知道的事
- 【Python】30行代码教你将微信变成智能回复机器人
- 【python爬虫】知乎互联网话题问答内容可视化分析
- “mysqlbinlog”工具做binlog server靠谱吗?
- 看各路神仙如何大战MySQL insecure warning报警有感
- 由optimizer_switch所引起的诡异问题
- 【Oracle 12c Flex Cluster专题 】— Leaf Node的故障迁移
- MySQL中的统计信息相关参数介绍
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Yii2框架加载css和js文件的方法分析
- php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
- python如何求圆的面积
- php实现微信公众号企业转账功能
- PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
- Python之Matplotlib文字与注释的使用方法
- Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
- python中return如何写
- PHP钩子实现方法解析
- 浅谈numpy中函数resize与reshape,ravel与flatten的区别
- PHP文件类型检查及fileinfo模块安装使用详解
- PHP封装的分页类与简单用法示例
- ThinkPHP3.2框架自带分页功能实现方法示例
- PHP获取访问设备信息的方法示例
- PHP实现微信提现功能