【面试经典 150 | 回溯】组合总和

server/2024/9/25 3:53:02/

文章目录

  • 写在前面
  • Tag
  • 题目来源
  • 解题思路
  • 写在最后

写在前面

本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……

专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:

  • Tag:介绍本题牵涉到的知识点、数据结构;
  • 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
  • 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
  • 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
  • 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。

Tag

回溯】【组合】【递归


题目来源

39. 组合总和


解题思路

方法一:回溯

思路

这题目就是枚举所有可能,看哪一种可能求和为 target

因为选择某个元素的时候就会让 target 减去这个数,因而最后 target == 0 时表示已经选择的元素可以求和为 traget,即为递归出口。

需要注意的是每个元素可以选择多次,因此选了这个元素,下个元素仍然可以选择这个元素。

d f s dfs dfs 参数列表中的 i 表示开始选择元素的下标,这样做可以去除重复的组合。如果不增加这个参数,示例 1 中就会有 [2,2,3],[2,3,2],[3,2,2] 这个样的重复组合

代码

class Solution {
private:vector<vector<int>> res;vector<int> tmp;void dfs(vector<int>& candidates, int target, int i) {if (target == 0) {res.push_back(tmp);return;}if (target < 0) {   // 剪枝return;}for (int k = i; k < candidates.size(); ++k) {tmp.push_back(candidates[k]);dfs(candidates, target - candidates[k], k);     // 每个元素可以选择多次tmp.pop_back();}}
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {dfs(candidates, target, 0);return res;}
};

复杂度分析

时间复杂度: O ( S ) O(S) O(S) S S S 为所有可行解的长度之和。见官方题解 分析.

空间复杂度: O ( t a r g e t ) O(target) O(target)。除答案数组外,空间复杂度取决于递归的栈深度,在最差情况下需要递归 O ( t a r g e t ) O(target) O(target) 层。


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。


http://www.ppmy.cn/server/22632.html

相关文章

Unix 进程基本信息

目录 一、程序执行流程二、进程的执行状态三、进程信息记录3.1 proc结构体3.2 user结构体 四、内存分配4.1 代码段代码段如何管理&#xff1f;4.2 数据段4.3 虚拟地址空间4.4 交换地址APR构成APR数量APR切换 内容来源&#xff1a;《Unix内核源码剖析》 一、程序执行流程 为程序…

什么是云手机?云手机有什么用?

过去&#xff0c;我们手中的手机是我们生活、工作、娱乐的得力助手&#xff0c;但随着时代的变迁和技术的发展&#xff0c;我们需要的不仅仅是一部手机&#xff0c;而是一个更强大、更灵活的工具。在这个时候&#xff0c;云手机横空出世&#xff0c;成为了我们手机使用的新选择…

将pdf转化为图片的方法

将pdf转化为图片的方法 package com.pdf.change2img;import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import org.springframework.util.Base64Utils;import javax.imageio.ImageIO; import java.awt.image.BufferedImage; im…

【Camera KMD ISP SubSystem笔记】CAM SYNC与DRQ③

DRQ什么时候调度Node去填写dependency ::Pipeline调度Node的sequenceId 0执行 Pipeline::ProcessRequest() { for (UINT nodeIndex 0; nodeIndex < m_orderedNodeCount ; nodeIndex) m_pDeferredRequestQueue->AddDef…

Go语言在Web开发中有哪些常用框架?

文章目录 1. Gin原因和解决方案示例代码 2. Echo原因和解决方案示例代码 3. Revel原因和解决方案示例代码 4. Buffalo原因和解决方案示例代码 总结 Go语言在Web开发中拥有许多优秀的框架&#xff0c;这些框架帮助开发者快速构建稳定且高效的Web应用。下面是一些常用的Go语言Web…

学习笔记:能量信号与功率信号(一)

目录 一、能量信号&#xff08;Energy Signal&#xff09; 二、功率信号&#xff08;Power Signal&#xff09; 三、信号关系图 四、总结 能量信号和功率信号是信号分析中两个基本的概念&#xff0c;它们主要用来描述信号在时间域中能量分布的特性&#xff0c;对于理解信号…

上海鑫吉百数——让制造型食品企业焕发新生机!

随着全球化和互联网的普及&#xff0c;食品行业的竞争也日益激烈。数字化转型有助于企业打破地域限制&#xff0c;拓宽市场渠道&#xff0c;提升品牌影响力和竞争力。在信息化、网络化的时代背景下&#xff0c;数字化转型成为企业适应社会发展的必然选择。消费者对于食品的需求…

SSH远程直连服务器docker容器的jupyter

SSH远程直连服务器docker容器的jupyter 动机&#xff1a;最近在公司服务器使用jupyter出现了点问题&#xff0c;也不知道怎么回事&#xff0c;jupyter lab打开都没问题&#xff0c;但是准备打开一个ipynb文件时就卡住了&#xff0c;啥反应没有&#xff0c;ctrlC 也不能关掉jupy…