力扣39. 组合总和

news2024/11/17 3:52:18

Problem: 39. 组合总和

文章目录

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

题目描述

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

思路及解题方法

1.创建一个 res 变量存储所有满足条件的组合结果,使用 track 变量记录当前的组合路径,使用 trackSum 变量记录当前路径中元素的和。

2.回溯方法 backtrack:

2.1.基本情况1:如果 trackSum 等于目标 target,则将当前路径 track 添加到结果 res 中,并返回。
2.2.基本情况2:如果 trackSum 大于目标 target,则直接返回。

3.循环与选择:

3.1.循环从 start 位置开始遍历 nums 数组。
3.2.将当前元素添加到 track 中,并更新 trackSum。
3.3.递归调用 backtrack 方法,并将 start 位置保持为 i,允许重复选择当前元素。
3.4.回溯:从 track 中移除最后一个元素,并更新 trackSum,以便尝试其他组合。

复杂度

时间复杂度:

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

空间复杂度:

O ( N × 2 N ) O(N \times 2^N) O(N×2N)

Code

class Solution {
    List<List<Integer>> res = new LinkedList<>();
    // Record the backtracking path
    LinkedList<Integer> track = new LinkedList<>();
    // Record the path sum in track
    int trackSum = 0;

    /**
     * Combination Sum
     *
     * @param candidates Given array
     * @param target     Given number
     * @return List<List < Integer>>
     */
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        if (candidates.length == 0) {
            return res;
        }
        backtrack(candidates, 0, target);
        return res;
    }

    /**
     * Backtracking functions implement functions
     *
     * @param nums   Given array
     * @param start  Decision stage
     * @param target Given number
     */
    private void backtrack(int[] nums, int start, int target) {
        // base case, find the target and record the result
        if (trackSum == target) {
            res.add(new LinkedList<>(track));
            return;
        }
        // base case, exceed the target sum, stop the downward traversal
        if (trackSum > target) {
            return;
        }
        for (int i = start; i < nums.length; ++i) {
            trackSum += nums[i];
            track.add(nums[i]);
            backtrack(nums, i, target);
            trackSum -= nums[i];
            track.removeLast();
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【技巧】让xorg和gnome不要使用GPU

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 默认xorg会使用GPU加速&#xff1a; 现在取消他对GPU的占用&#xff1a; sudo vim /etc/X11/xorg.conf修改或添加以下内容&#xff1a; Section &quo…

9个优秀的Text2Sql(Chat2Sql)开源项目、资源

过去&#xff0c;领导、决策者或业务人员想要统计个数据、做个报告&#xff0c;总是绕不开技术人员的支持。领导需要将想法告诉技术人员&#xff0c;技术人员再将领导的想法转成技术语言&#xff08;例如&#xff1a;sql&#xff09;&#xff0c;然后对数据进行统计分析&#x…

electron基础使用

安装以及运行 当前node版本18&#xff0c;按照官网提供操作&#xff0c;npm init进行初始化操作&#xff0c;将index.js修改为main.js&#xff0c;执行npm install --save-dev electron。&#xff08;这里我挂梯子下载成功了。&#xff09;&#xff0c;添加如下代码至package.…

政务云参考技术架构

行业优势 总体架构 政务云平台技术框架图&#xff0c;由机房环境、基础设施层、支撑软件层及业务应用层组成&#xff0c;在运维、安全和运营体系的保障下&#xff0c;为政务云使用单位提供统一服务支撑。 功能架构 标准双区隔离 参照国家电子政务规范&#xff0c;打造符合标准的…

TensorFlow图像识别项目

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 目录 今天我们将讨论如何部署Flask项…

星网络 StarNet: Rewrite the Stars

论文题目&#xff1a;Rewrite the Stars 论文链接&#xff1a;http://arxiv.org/abs/2403.19967 代码链接&#xff1a;https://github.com/ma-xu/Rewrite-the-Stars 一、摘要 揭示星操作将输入映射到高维、非线性特征空间的能力——类似于核技巧——而无需扩展网络。提出了S…

第7章 用户输入和 while 循环

第7章 用户输入和 while 循环 7.1 函数 input()的工作原理7.1.1 编写清晰的程序7.1.2 使用 int()来获取数值输入7.1.3 求模运算符 7.2 while 循环简介7.2.1 使用 while 循环7.2.2 让用户选择何时退出7.2.3 使用标志7.2.4 使用 break 退出循环7.2.5 在循环中使用 continue7.2.6 …

Django DetailView视图

Django的DetailView是一个用于显示单个对象详情的视图。下面是一个使用DetailView来显示单个书籍详情的例子。 1&#xff0c;添加视图 Test/app3/views.py from django.shortcuts import render# Create your views here. from django.views.generic import ListView from .m…

deepin V23 新进展!deepin 成功适配 MilkV Mars

内容来源&#xff1a;deepin&#xff08;深度&#xff09;社区 deepin-ports SIG&#xff08;Special Interest Group&#xff0c;特别兴趣小组&#xff09;&#xff0c;deepin&#xff08;深度&#xff09;社区积极与各大厂商展开合作&#xff0c;参与对 RISC-V 架构和设备的适…

鸿蒙原生开发——轻内核A核源码分析系列三 物理内存(2)

3.1.2.3 函数OsVmPhysLargeAlloc 当执行到这个函数时&#xff0c;说明空闲链表上的单个内存页节点的大小已经不能满足要求&#xff0c;超过了第9个链表上的内存页节点的大小了。⑴处计算需要申请的内存大小。⑵从最大的链表上进行遍历每一个内存页节点。⑶根据每个内存页的开始…

10秒变鬼短视频:四川鑫悦里文化传媒有限公司

10秒变鬼短视频&#xff1a;创意与惊悚的完美融合 在短视频的世界里&#xff0c;创新与独特性 节奏、巧妙的剪辑和惊悚的氛围&#xff0c;成为了许多观众喜爱的对象。四川鑫悦里文化传媒有限公司将探讨“10秒变鬼”短视频的创作技巧、受众心理以及其对短视频行业的启示。 一…

人脸识别系统---多人脸提取

一、多人脸提取 1.导包、设置窗口、选择文件夹里图片的函数和单人脸提取一致&#xff0c;此处省略&#xff08;详情看‘单人脸提取’&#xff09; 2.对图像进行处理&#xff0c;在窗口画布上显示出来 2.1定义名为tq的函数&#xff0c;在函数内部声明了三个全局变量file_path…

[Spring Boot实战] 如何快速地创建spring boot项目

文章目录 一、背景说明二、环境说明三、创建步骤3.1 选择项目JDK版本和Initializer服务地址3.2 设置项目的元数据3.3 引入依赖3.4 选择项目路径 四、额外的工作五、问题5.1 为什么使用Lombok&#xff1f; 一、背景说明 使用spring boot创建JAVA项目&#xff0c;是目前比较主流…

数据结构与算法笔记:基础篇 - 红黑树(下):掌握这些技巧,你也可以实现一个红黑树

概述 红黑树是一个让人又爱又恨的数据结构&#xff0c;“爱” 是因为它稳定、高性能&#xff0c;“恨” 是因为实现起来实在太难了。本章讲红黑树的实现&#xff0c;对于基础不太好的同学&#xff0c;理解起来可能会有些困难。但是&#xff0c;我觉得没有必要去死磕它。 为什…

一个公用的数据状态修改组件

灵感来自于一项重复的工作&#xff0c;下图中&#xff0c;这类禁用启用、审核通过不通过、设计成是什么状态否什么状态的场景很多。每一个都需要单独提供接口。重复工作还蛮大的。于是&#xff0c;基于该组件类捕获组件跳转写了这款通用接口。省时省力。 代码如下&#xff1a;…

专业学习|博弈论-课程沿革

学习来源&#xff1a;北京大学刘霖《博弈论》MOOC公开课 备注&#xff1a;仅做学习分享&#xff0c;请勿转载&#xff0c;转载必究&#xff01; &#xff08;一&#xff09;博弈论的预备知识 基本的微积分的知识和概率论的知识。简单的说会求导数&#xff0c;会求简单的积分&am…

文案策划日常大公开:掌握这些技巧,让你工作效率翻倍

本周的工作和生活安排得满满当当&#xff0c;但这些看似繁重的任务&#xff0c;其实都是我利用碎片化时间高效完成的。 这里和大家分享一下&#xff0c;我是如何在这忙碌的一周中&#xff0c;既完成本职工作又享受生活的。 本周工作日常汇总&#xff1a; 1. 品牌小红薯笔记&…

Java高阶数据结构-----并查集(详解)

目录 &#x1f9d0;一.并查集的基本概念&实例&#xff1a; &#x1f92a;二.并查集代码&#xff1a; &#x1f602;三&#xff1a;并查集的一些习题&#xff1a; A.省份数量 B.等式方程的可满足性 &#x1f9d0;一.并查集的基本概念&实例&#xff1a; 并查集概念&…

5.3 数据模型设计总结

概述&#xff1a; 数据模型设计是指根据需求和目标设计出合适的数据模型的过程。数据模型是对现实世界中数据的抽象和表示&#xff0c;它定义了数据的结构、关系和约束。数据模型设计的目标是保证数据的一致性、完整性和可用性&#xff0c;同时满足系统性能和可扩展性的要求。…

Python基础教程(十二):模块

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…