力扣39. 组合总和

Problem: 39. 组合总和

文章目录

  • 题目描述
  • 思路及解题方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路及解题方法

该问题是组合问题的一个变体,可以归纳为元素无重复可复选问题,其代码的实现几乎和组合问题一模一样,由于在组合问题中我们只需要利用一个变量在递归时将其加一再传输到回溯函数中可以保证元素不会重复,那么我们只需让那个变量不再加一而是直接传输到回溯函数中即可,但此时我们需要重新找一个变量来控制递归的结束不然递归会无限的执行下去,此时我们定义一个整形变量targetSum来记录决策路径上的元素值是否等于target,若等于则将当前的决策路径添加到结果集合中,若大于target则结束当前的递归

复杂度

时间复杂度:

O ( N × 2 N ) O(N \times 2^N) O(N×2N);其中 N N N为数组candidates的长度

空间复杂度:

O ( N ) O(N) O(N)

Code

class Solution {
    //Recode the result
    vector<vector<int>> res;
    //Recode decision path
    vector<int> track;
    //Recode the sum of decision path
    int trackSum = 0;
public:
    /**
     * Find the number of combinations equal to the target sum
     *
     * @param candidates An array of combinations to be selected
     * @param target The target number
     * @return vector<vector<int>>
     */
    vector<vector<int>> combinationSum(vector<int> &candidates, int target) {
        if (candidates.size() == 0) {
            return res;
        }
        backtrack(candidates, 0, target);
        return res;
    }

    /**
     * Implementation of backtracking function
     * 
     * @param nums An array of combinations to be selected
     * @param start Thr decision stage
     * @param target The target number
     */
    void backtrack(vector<int> &nums, int start, int target) {
        //Base case
        if (trackSum == target) {
            res.push_back(track);
            return;
        }
        
        if (trackSum > target) {
            return;
        }
        for (int i = start; i < nums.size(); ++i) {
            track.push_back(nums[i]);
            trackSum += nums[i];
            backtrack(nums, i, target);
            track.pop_back();
            trackSum -= nums[i];
        }
    }
};

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

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

相关文章

汽车电子与软件架构概述

汽车电子与软件架构概述 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠自己…

C语言 数据在内存中的存储

目录 前言 一、整数在内存中的存储 二、大小端字节序和字节序判断 2.1.练习一 2.2 练习二 2.3 练习三 2.4 练习四 2.5 练习五 2.6 练习六 三、浮点数在内存中的存储 3.1 浮点数存的过程 3.2 浮点数取的过程 总结 前言 数据在内存中根据数据类型有不同的存储方式&#xff0c;今…

jvm调优实战操作

1.什么是jvm jvm就是lava虚拟机&#xff0c;他是java运行环境的一部分&#xff0c;它虚构出来的一台计算机&#xff0c;在通过在实际的计算机上仿真模拟各种计算机功能来实现Java应用程序&#xff0c;有JVM从软件层面屏蔽了底层硬件、指令层面的细节让他兼容各种系统 2.我们调…

【matlab】如何批量修改图片命名

【matlab】如何批量修改图片命名 (●’◡’●)先赞后看养成习惯😊 假如我的图片如下,分别是1、2、3、4、5的命名 需求一:假如现在我需要在其后面统一加上_behind字符串,并且保留原命名,同时替换掉原先的图片,也就是不copy新的一份,直接在原文件夹中处理,我们可以进行…

设计模式 — — 单例模式

一、是什么 单例模式只会在全局作用域下创建一次实例对象&#xff0c;让所有需要调用的地方都共享这一单例对象 二、实现 // 单例构造函数 function CreateSingleton (name) {this.name name;this.getName(); };// 获取实例的名字 CreateSingleton.prototype.getName func…

MyBatis是纸老虎吗?(三)

上篇文章——《MyBatis是纸老虎吗&#xff1f;&#xff08;二&#xff09;》——梳理了MyBatis的执行流程&#xff0c;这篇文章想详细聊聊MyBatis的解析过程。当我把这个想法讲个同事时&#xff0c;他不可置信的说道&#xff1a;“这有什么好梳理的&#xff1f;难道你要介绍xml…

WorkPlus Meet局域网视频会议软件的领先解决方案

局域网视频会议软件在现代企业中发挥着重要的作用&#xff0c;而在众多选项中&#xff0c;为何选择WorkPlus Meet作为局域网视频会议软件&#xff1f; 选择局域网视频会议软件时需要考虑到企业的需求。WorkPlus Meet提供了稳定、高效的局域网视频会议功能&#xff0c;能够满足…

粤嵌6818嵌入式开发入门教程

学习目标 1.了解嵌入式开发 2.开发环境的搭建 3.Linux操作系统的基本操作 一、了解嵌入式开发 以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 1.嵌入式可以干…

面部表情参考图

创造表情形变 | Character Creator | Reallusion 皮笑肉不笑&#xff1f;读取情绪的AI说&#xff1a;我太难了_面部

Vue.js+SpringBoot开发农家乐订餐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户2.2 管理员 三、系统展示四、核心代码4.1 查询菜品类型4.2 查询菜品4.3 加购菜品4.4 新增菜品收藏4.5 新增菜品留言 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的农家乐订餐系统&#xff0c…

详细分析Java中的BeanCopier属性复制(附Demo)

目录 前言1. 基本知识2. 同属性Demo3. 不同属性Demo4. 实战场景 前言 基本知识推荐阅读&#xff1a; 浅拷贝和深拷贝的深度理解java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&…

PHP魔术方法详解

php魔术方法是一些特殊的方法&#xff0c;由特定的环境来进行触发。 这些魔术方法让开发者能够更好地控制对象的行为&#xff0c;特别是在处理不常见的操作或者需要自动化处理某些任务时非常有用。 1、_construct()构造函数&#xff1a; <?php highlight_file(__FILE__);…

小白DB补全计划Day1-LeetCode:SQL基本操作select

前言&#xff1a;找工作&#xff08;主人&#xff09;的任务罢了 链接&#xff1a;1757. 可回收且低脂的产品 - 力扣&#xff08;LeetCode&#xff09; 584. 寻找用户推荐人 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 对DB篇的SQL章不太知道怎么写…

2023年蓝桥杯省赛——幸运数字

目录 题目链接&#xff1a;0幸运数字 - 蓝桥云课 (lanqiao.cn) 解法 思路 高级思路 总结 题目链接&#xff1a;0幸运数字 - 蓝桥云课 (lanqiao.cn) 解法 首先是我写了差不多一个小时的解法&#xff0c;裂开了&#xff0c;为什么我如此废物 思路 寻找第2023个在二进制、八…

每日一题——LeetCode2789.合并后数组中的最大元素

方法一 倒序遍历&#xff1a; 将数组倒序过来看&#xff0c;就是从最后一个数开始&#xff0c;如果它前面一个数小于等于它就可以把前面一个数吃掉同时加上前一个数的值形成一个新的数&#xff0c;如果碰到一个更大的数就吃不动了&#xff0c;那么就换那个更大的数去继续吃前面…

API接口:获取歌曲、小姐姐图片以及视频

文章目录 前言一、成果展示二、接口演示 1、歌曲2、图片和视频三、创造难点四、总结 前言 上次利用QQ音乐官网做了一个根据qq号获取暗恋人喜欢的歌单以及收藏歌曲&#xff0c;但是感觉功能还是太单薄了&#xff0c;于是我再次利用网上提供的免费API接口补充了一些功能。 一、成…

数据库精通之路:国产GBASE数据库学习网站全攻略

介绍&#xff1a;GBASE是一个包含多种产品的数据库系列&#xff0c;由南大通用数据技术有限公司推出&#xff0c;以其高性能和高可用性在国内数据库市场享有较高的品牌知名度。以下是GBASE系列的主要产品特点&#xff1a; GBase 8a&#xff1a;这是一个面向大数据分析的高性能数…

Unload-labs-pass-03

这里是设置了黑名单不能传.asp.aspx.php.jsp文件 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(.asp,.aspx,.php,.jsp);$file_name trim($_FILES[upload_file][name]);$file_name deldot($file_name);//删…

vue2+vant2+Laravel7 实现多图上传到七牛云

后端接口 1、路由&#xff0c;在 routes/api.php 中 Route::resource(photos, PhotoController)->only(store);2、创建对应控制器 <?php namespace App\Http\Controllers; use Illuminate\Http\Request;class PhotoController extends Controller {/**** 上传图片* p…

LangChain: 调研报告

概述 LangChain是一个用于开发由语言模型驱动的应用程序的框架。它允许创建能够连接到上下文源&#xff08;如提示指令、少量示例、内容基础等&#xff09;的应用程序&#xff0c;并且能够进行推理&#xff08;基于提供的上下文如何回答问题、采取何种行动等&#xff09;。提供…