39. 组合总和

news/2024/5/18 18:35:38/文章来源:https://blog.csdn.net/Hunter_Kevin/article/details/126949194

39. 组合总和

    • 题目
    • dfs思路一:
    • dfs思路二:

题目

给你一个 无重复元素 的整数数组 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
1 <= candidates[i] <= 200
candidate 中的每个元素都 互不相同
1 <= target <= 500

dfs思路一:

在这里插入图片描述

class Solution {
public:vector<vector<int>> ans;vector<int> path; vector<vector<int>> combinationSum(vector<int>& num, int target) {sort(num.begin(), num.end());dfs(num, 0, target);return ans;}void dfs(vector<int>& num, int begin, int target){// 如果符合情况,则添加到答案中if(target == 0){ans.push_back(path);return;}// 枚举当前下标之后的数字,去重for(int i = begin; i < num.size(); i++){// 如果减去当前位置元素之后剩余值<0时,则不再继续深搜,剪枝,递归结束的条件if(target - num[i] < 0) break;path.push_back(num[i]);dfs(num, i, target-num[i]);path.pop_back();}}
};

dfs思路二:

在这里插入图片描述

每一层表示num[cur]选几个
下一层表示num[cur+1]选几个
恢复现场的时候要清空当前层的状态,即当前层选了多少个,在结束之前就pop多少次

class Solution {
public:vector<vector<int>> ans;vector<int> path;vector<vector<int>> combinationSum(vector<int>& num, int target) {dfs(num, target, 0);return ans;}void dfs(vector<int>& num, int target, int cur){// 如果符合条件,则添加到结果数组中if(target == 0){ans.push_back(path);return;}// 递归结束条件if(cur == num.size()) return;// 枚举在当前状态下,num[cur]选多少个,限制条件为在当前状态下,选取num[cur]的个数要<=剩余值for(int i = 0; i * num[cur] <= target; i++){dfs(num, target - i*num[cur], cur+1);path.push_back(num[cur]);}// 在当前状态下,num[cur]选取了多少个,就pop多少次,这里pop的是当前状态下的pathfor(int i = 0; i * num[cur] <= target; i++)path.pop_back();}
};

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

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

相关文章

相关性分析热力图(PythonMatlab代码实现)

目录 1 热力图 1.1 简介 1.2 语法 2 算例1&#xff08;Python代码实现&#xff09; 2.1 算例 2.2 Python代码 2.3 运行结果 3 算例2&#xff08;Python代码实现&#xff09; 4 算例3&#xff08;Python代码实现&#xff09; 4.1 算例 4.2 Python代码 4.3 运行结果 5…

Sovit3D智慧园区:数字孪生园区大屏一体化管理平台

建设背景 随着全球物联网、移动互联网、云计算、大数据等新一轮信息技术的迅速发展和深入应用&#xff0c;推动产业升级和发展数字经济成为重要发力点。而产业园区作为产业升级转型的重要载体&#xff0c;建设智慧园区的需求高速增长。智慧园区在加强信息基础设施建设的同时&a…

网络编程-TCP

软件结构分类 C/S结构 &#xff1a;全称为Client/Server结构&#xff0c;是指客户端和服务器结构。常见程序有&#xff31;&#xff31;、迅雷等软件 B/S结构 &#xff1a;全称为Browser/Server结构&#xff0c;是指浏览器和服务器结构。常见浏览器有谷歌、火狐等 网络编程三要…

Unity Editor 扩展入门1

教程来源:https://www.youtube.com/watch?v=491TSNwXTIg&t=204s 一个点击物体修改材质颜色的简单editor扩展工具 using UnityEngine; using UnityEditor;public class ExampleWindow : EditorWindow {[MenuItem("Window/Colorizer")]public static void ShowWi…

入行数字IC验证后会做些什么?需要哪些必备技能?

想必大家眼中的验证工程师就是整天对着电脑敲代码&#xff0c;这是大家对这个岗位的固定印象。其实真实情况并不是这样&#xff0c;那么入行数字IC验证后会做些什么&#xff1f;需要哪些必备技能&#xff1f;下面就一起来了解一下吧。 什么是IC验证工程师&#xff1f; 回答这…

15天深度复习JavaWeb的详细笔记(四)——HTML、CSS

Demo04-HTML、CSS 1&#xff0c;HTML 1.1 介绍 HTML 是一门语言&#xff0c;所有的网页都是用HTML 这门语言编写出来的&#xff0c;也就是HTML是用来写网页的&#xff0c;像京东&#xff0c;12306等网站有很多网页。HTML(HyperText Markup Language)&#xff1a;超文本标记语…

阿里云 window下 nginx 安装https证书的配置。

首先我这里使用的是阿里云免费的https证书。 免费证书可以申请20个&#xff0c;每个的有效期为1年。 我这里使用的是nginx部署&#xff0c;所以下载nginx的 证书压缩包 下载下来之后解压&#xff0c;有两个文件一个是&#xff0c; 一个是xxx.pem ,另一个是xxxx.key. nginx 配…

企业文件加密系统价格—公司文件加密系统多少钱?

企业文件加密系统多少钱&#xff1f;怎么收费&#xff1f;一般是根据需要购买的台数进行收费的。 现在市面上有很多做文件加密系统的厂商&#xff0c;每家收费标准都不一样&#xff0c;在百度搜索文件加密系统的价格&#xff0c;就会发现价格有几百到1000/台的不等。企业文件加…

详细讲解FuzzBench如何添加新的Fuzzer

最近几天一直在弄FuzzBench添加新的fuzzer&#xff0c;在添加过程中遇到各种问题&#xff0c;在此做详细记录。 拉取fuzzbench到本地 这一部分可以直接参考此链接FuzzBench预备条件 1.拉取代码到本地 git clone https://github.com/google/fuzzbench cd fuzzbench git submo…

我上线了一个炫酷的项目实战教程网站,主流技术一网打尽~

之前经常遇到小伙伴问我&#xff0c;之前写的某篇技术文章在哪里。又或者是拿着很早以前的部署文档问我&#xff0c;按这个文章怎么部署不起来。其实他们如果上过我的实战教程网站的话&#xff0c;估计就不会有这些问题了&#xff0c;我的原创文章基本都会同步上去。今天和大家…

孙宇晨:区块链行业势必迎来光明的未来

近日&#xff0c;波场TRON创始人孙宇晨受邀在米尔肯研究院&#xff08;Milken Institute&#xff09;官方网站上发表了题为《区块链行业势必迎来光明的未来》的署名文章。孙宇晨在文章中表示&#xff0c;作为一种新兴的颠覆性技术&#xff0c;加密行业的发展之路并非一帆风顺。…

Fat Tree 分析

本文是源于USTC Advance Computer Network 的课程内容做的总结 论文来源&#xff1a;A scalable, commodity data center network architecture 本文将分析Fat Tree的 拓扑结构、编址方案和路由算法三个方面。 拓扑结构 该文章中从传统数据中心通信的问题提出了FatTree的拓扑…

机器学习——聚类(K-Means)

机器学习——聚类(K-Means)那是什么 无监督学习——聚类聚类是基于相似对象将一组对象分组为类/类别的过程。聚类是一部分 无监督学习 .这种方法通常用于确定业务决策,特别是在基于来自集群的数据预测来预测正确的业务策略时。聚类还可用于异常检测、客户细分和改善客户服务…

食品行业中的 AI 和 ML 用例

食品行业中的 AI 和 ML 用例人工智能和机器学习为每个行业的进步铺平了道路。这些技术的使用帮助他们优化和自动化流程,降低成本和时间要求,减少人为错误的可能性。让我们了解采用基于 AI 和 ML 的技术如何使食品行业受益。Photo by 阿诺塞诺纳 on 不飞溅 由农民和各种企业…

持续集成持续交付

目录 一、Git工具 二、git安装 三、git使用 三、gitlab代码仓库 四、jenkins持续集成 五、Jenkins自动构建docker镜像&#xff0c;并上传至harbor仓库 六、Jenkins连接docker构建主机 七、jenkins结合ansible 一、Git工具 git简介 1).Git特点&#xff1a; • 速度 • 简…

PHP在线教育平台源码 网课小程序源码

在线教育知识付费平台 网课小程序源码 教育直播网校小程序源码 开发环境&#xff1a;PHP MYSQL 源码包含&#xff1a;PC小程序公众号 H5 需要绑定对接公众号 本套源码程序适合做视频图文结合的知识付费平台。带分销功能&#xff0c;多种分销方式自由设置&#xff08;可快速积…

通关GO语言22 网络编程:Go 语言如何通过 RPC 实现跨平台服务?

在上一讲中&#xff0c;我为你讲解了 RESTful API 的规范以及实现&#xff0c;并且留了两个作业&#xff0c;它们分别是删除和修改用户&#xff0c;现在我为你讲解这两个作业。 删除一个用户比较简单&#xff0c;它的 API 格式和获取一个用户一样&#xff0c;但是 HTTP 方法换…

二、JumpServer堡垒机管理员手册

JumpServer是一款非常简单好用的开源堡垒机&#xff0c;本文根据实际生产案例编辑的管理员手册&#xff0c;列出了JumpServer常用功能。JumpServer可以很好的保护公司内部服务器&#xff0c;并满足等保2.0安全需求。 目录 一、堡垒机用户创建 二、创建特权用户 三、创建普通…

金字塔思维

背景 1、大脑偏爱有规律的信息 2、把问题想全&#xff0c;同时可以深入 1 方法&#xff1a; 1.1 识别纵向信息逻辑&#xff1a; 被动接受了大量杂乱信息&#xff0c;通过金字塔思维识别信息的逻辑关系 1.2 横向分类&#xff1a;信息归类整理 穷尽所有要素、对要素进行分类…

docker、docker-compose部署oracle,plsql连接远程oracle

一、docker部署oracle 1. 下载镜像并启动容器 # 拉取阿里oracle_11g的镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g # 创建容器并启动 docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 2.…