【Leetcode】377. 组合总和 Ⅳ

文章目录

  • 题目
  • 思路
  • 代码
  • 复杂度分析
    • 时间复杂度
    • 空间复杂度
  • 结果
  • 总结

题目

题目链接🔗
给你一个由 不同 整数组成的数组 n u m s nums nums,和一个目标整数 t a r g e t target target 。请你从 n u m s nums nums 中找出并返回总和为 t a r g e t target target 的元素组合的个数。

题目数据保证答案符合 32 32 32 位整数范围。

示例 1:
**输入:**nums = [1,2,3], target = 4
**输出:**7
解释:
所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
请注意,顺序不同的序列被视作不同的组合。

示例 2:
**输入:**nums = [9], target = 3
**输出:**0

提示:

  • 1 ≤ n u m s . l e n g t h ≤ 200 1 \leq nums.length \leq 200 1nums.length200
  • 1 ≤ n u m s [ i ] ≤ 1000 1 \leq nums[i] \leq 1000 1nums[i]1000
  • n u m s nums nums 中的所有元素 互不相同
  • 1 ≤ t a r g e t ≤ 1000 1 \leq target \leq 1000 1target1000

思路

这道题可以使用动态规划来解决。我们定义一个数组 d p dp dp,其中 d p [ i ] dp[i] dp[i] 表示选取的元素之和等于 i i i 的方案数。目标是求 d p [ t a r g e t ] dp[target] dp[target]

动态规划的边界是 d p [ 0 ] = 1 dp[0]=1 dp[0]=1,因为只有当不选取任何元素时,元素之和才为 0 0 0,所以只有 1 1 1 种方案。

对于 1 ≤ i ≤ t a r g e t 1 \leq i \leq target 1itarget,我们遍历数组 n u m s nums nums 中的每个元素 n u m num num,当 n u m ≤ i num \leq i numi 时,将 d p [ i − n u m ] dp[i-num] dp[inum] 的值加到 d p [ i ] dp[i] dp[i]

最终, d p [ t a r g e t ] dp[target] dp[target] 的值即为答案。

通过遍历数组 n u m s nums nums 中的每个元素来更新 d p [ i ] dp[i] dp[i] 的值,不同的选取顺序都会被考虑到。

代码

class Solution {
public:long long dp[1010];int combinationSum4(vector<int>& nums, int target) {dp[0]=1;for(int i=0;i<=target;i++){for(int j=0;j<nums.size();j++){if(i>=nums[j])dp[i]=(int)dp[i]+dp[i-nums[j]];}}return dp[target];}
};

复杂度分析

时间复杂度

假设数组 n u m s nums nums 的长度为 n n n,目标整数为 t a r g e t target target,那么时间复杂度为 O ( n ⋅ t a r g e t ) O(n \cdot target) O(ntarget)

空间复杂度

空间复杂度为 O ( t a r g e t ) O(target) O(target),即动态规划数组的长度

结果

在这里插入图片描述

总结

动态规划

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

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

相关文章

leetcode-二叉搜索树与双向链表-89

题目要求 思路 1.观察给的用例&#xff0c;本质上是把数据按照中序遍历连接起来 2.将结点以中序遍历的方式插入到数组中&#xff0c;注意这里是vector<TreeNode*> 3.将数组中的数据连接起来 代码实现 /* struct TreeNode {int val;struct TreeNode *left;struct TreeN…

【ARMv9 DSU-120 系列 6.1 -- PPU power and reset control】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 文章目录 PPU power and reset controlPPUs 功能特点Power policy unit operation静态策略动态策略Implicit resets from power modesPPU power and reset control DSU-120(DynamIQ™共享单元-120)的功耗模式控制由集成在集群…

基于昇腾AI 使用AscendCL实现垃圾分类和视频物体分类应用

现如今&#xff0c;人工智能迅猛发展&#xff0c;AI赋能产业发展的速度正在加快&#xff0c;“AI”的需求蜂拥而来&#xff0c;但AI应用快速落地的过程中仍存在很大的挑战&#xff1a;向下需要适配的硬件&#xff0c;向上需要完善的技术支持&#xff0c;两者缺一不可。 基于此&…

去雾笔记-Pixel Shuffle,逆Pixel Shuffle,棋盘效应,转置卷积

文章目录 1.Pixel Shuffle2.Inverse Pixel Shuffle3.棋盘效应4.转置卷积5.宽激活块6.PSPNet7.反射填充层&#xff08;Reflective Padding Layer&#xff09;8.tanh层 1.Pixel Shuffle Pixel Shuffle是一种用于图像超分辨率的技术&#xff0c;它通过重新排列图像的像素来增加图…

【Nginx】Nginx 最新社区稳定版-1.26.0-发布

时隔一年多&#xff08;2023/4/11~2024/4/23&#xff09;&#xff0c;Nginx终于发布了其最新社区稳定版&#xff0c;版本号为&#xff1a;1.26.0 本次发布的1.26.0版本&#xff0c;在1.25.x开发版分支基础上&#xff0c;修复了众多Bug&#xff0c;并且还带来了一些新的实验性的…

树莓派学习笔记--Wiring Pi库的安装

前言 在刚开始学习树莓派的时候&#xff0c;新版本操作系统与旧版本有一定的区别&#xff0c;就导致跟着网上的教程来出现了很多问题&#xff0c;然后网上新操作系统的教程又很少&#xff0c;就导致前些时间学习一直没有进展。最近终于是把这些问题解决了。所以记录下来这些东西…

MySql篇

索引 B-树 定义&#xff1a; 1、根节点至少包含两个孩子 2、每个节点最多包含m个孩子(m > 2)&#xff0c;m为树的深度 3、除了根节点和叶子节点&#xff0c;其他节点至少有ceil(m/2)个孩子&#xff0c;ceil函数为取上限&#xff0c;例如ceil(1.2)2&#xff0c;就是小数位…

游戏新手村18:游戏广告渠道与广告形式

上文我们说到&#xff0c;渠道为王&#xff0c;渠道可以为我们带来流量和用户&#xff0c;进而带来收入。我们可以通过哪些渠道导入用户呢&#xff1f;每个渠道有哪些优劣呢&#xff1f;在进行游戏营销推广的时候我们该如何选择呢&#xff1f; 根据付费性质&#xff0c;我们可…

docker如何查看对外暴露接口

在Docker的世界里&#xff0c;了解如何查看容器对外暴露的接口是管理Docker应用的关键技能之一。暴露接口允许外部世界与容器内部的服务进行通信&#xff0c;是实现服务交互和持续集成/持续部署&#xff08;CI/CD&#xff09;管道的基础。本文将深入探讨Docker中暴露接口的机制…

先进制造aps专题四 计划型简单aps系统(plan)和排产型复杂aps系统(Scheduling)的区别

计划型算法很简单&#xff0c;只考虑产品和产线/车间&#xff0c;一个产线/车间对于一个产品&#xff0c;产线/车间24小时生产&#xff0c;没有休息时间段&#xff0c;java web类型的aps系统都是这种类型&#xff0c;这种其实是计划型的aps系统(plan) 要是排产考虑产品工序&am…

前端Vue2项目搭建过程

一.准备工作 1.可以上网找一些设计稿寻找思路开发页面界面布局 站酷设计网站&#xff1a;站酷ZCOOL-设计师互动平台-打开站酷&#xff0c;发现更好的设计&#xff01; 花瓣网&#xff1a;花瓣网 - 陪你做生活的设计师&#xff08;创意灵感天堂&#xff0c;搜索、发现设计灵感…

Pytorch迁移学习训练病变分类模型

划分数据集 1.创建训练集文件夹和测试集文件夹 # 创建 train 文件夹 os.mkdir(os.path.join(dataset_path, train))# 创建 test 文件夹 os.mkdir(os.path.join(dataset_path, val))# 在 train 和 test 文件夹中创建各类别子文件夹 for Retinopathy in classes:os.mkdir(os.pa…

【Windows】达芬奇19安装教程

DaVinci Resolve Studio是一个结合专业的8k编辑、颜色混合、视觉效果和音频后期制作的软件。只需点击一下&#xff0c;你就可以立即在编辑、混音、特效和音频流之间切换。此外&#xff0c;达芬奇是一个多用户协作的解决方案&#xff0c;使编辑、助理、色彩学家、视觉效果设计师…

SpringBoot统一结果处理和统一异常处理

一、使用统一返回对象 大部分前后端项目采用 JSON 格式进行数据交互,定义一个统一的数据规范,有利于前后台的交互、以及信息处理。比如如下: 【输出格式如下所示】 {"success": true,"code": 200,"message": "查询用户列表",&quo…

OS复习笔记ch4

引言 上一章&#xff0c;我们学习了进程的相关概念和知识&#xff0c;不知道小伙伴们的学习进度如何&#xff0c;没看的小伙伴记得去专栏看完哦。 线程从何而来 我们之前说过&#xff0c;进程是对程序运行过程的抽象&#xff0c;它的抽象程度是比较高的。 一个进程往往对应一…

C++:静态成员变量和静态成员方法

静态成员变量 C中的静态成员变量是属于类而不是类的实例的变量。这意味着无论创建了多少个类的实例&#xff0c;静态成员变量都只有一个副本&#xff0c;并且可以被所有类的实例共享。 让我们来看一个示例&#xff1a; class RolePlayer { public://静态成员变量static int …

先进制造aps专题三 为什么java语言不适合作为aps算法的开发语言

为什么java语言不适合作为aps算法的开发语言 主要两个原因 1 java的list在特定位置插入&#xff0c;其实是重新生成一个新list,而不像c就是指针操作 2 数据量大&#xff0c;运行时间长&#xff0c;会跑崩 所以商业aps产品&#xff0c;都是清一色的用c写aps算法 先进制造…

Uniapp 点击图片放大

1、html(循环图片) <view v-for"(i,index) in photo_list" :key"photoindex"><img :src"i" alt"" click"ClickImage(photo_list,i)" /></view> 2、js(方法) ClickImage(PhotoAddress, index) {uni.previ…

值得让英伟达CEO黄仁勋亲自给OpenAI配送的AI服务器!一文带你了解算力,GPU,CPU!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

CSS_scss切换主题

目录assets/theme以下新建文件 _handle.scss import ./_themes.scss;// 定义混合指令, 切换主题,并将主题中的所有规则添加到theme-map中 mixin themify() {// 将themes中规则放入theme-mapeach $theme-name,$theme-map in $themes {$theme-map: $theme-map !global;[data-t…