【Leetcode】377. 组合总和 Ⅳ

devtools/2024/11/14 12:47:18/

文章目录

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

题目

题目链接🔗
给你一个由 不同 整数组成的数组 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.ppmy.cn/devtools/22165.html

相关文章

初识BootStrap

目录 前言: 1.Bootstrap的特点包括&#xff1a; 1.1响应式设计&#xff1a; 1.2组件丰富&#xff1a; 1.3易于定制&#xff1a; 1.4兼容性良好&#xff1a; 1.5强大的社区支持&#xff1a; 1.6一致的样式和布局&#xff1a; 1.7 插件和扩展性 2.初识Ajax: 2.1同步请求…

基于SSM+Jsp+Mysql的定西扶贫惠农推介系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

初学者C语言进阶经典题(必刷)

复习算法设计与分析 T1孪生数&#xff08;本质&#xff1a;&#xff08;&#xff08;A因子之和&#xff09;的因子之和&#xff09;A&#xff09;&#xff08;A的因子之和等于B&#xff0c;B的因子之和等于A&#xff09; 给定搜索范围m和n&#xff0c;(1<m<n<20000)…

Python小功能实现(链接下载图品并存储到EXCEL中)

import os import requests from openpyxl import Workbook from openpyxl.drawing.image import Image from concurrent.futures import ThreadPoolExecutor# 图片链接列表 image_urls ["https://uploads/file/20230205/f85Lpcv8PXrLAdmNUDE1Hh6xqkp0NHi2gSXeqyOb.png&q…

Unity 异常 bug

OverlapBoxNonAlloc 使用bug 环境&#xff1a; Unity2021.3.15 在测试场景中使用 OverlapBoxNonAlloc 测试检测没有问题 但是到了真实应用场景&#xff0c;使用 OverlapBoxNonAlloc 检测移动中的小怪 小怪碰撞体为&#xff1a;带有 Rigidbody 的Circle Collider 2D 就会出现异…

【数据库】MySQL数据表记录改操作

修改语句&#xff1a;作用修改记录里的部分值 一、修改单表记录 语法&#xff1a; update 表名 set 字段名1新的值,字段名2新值,.......where 条件; 案例&#xff1a;修改学生表中姓王的同学的班级都改为11601 UPDATE students SET class11601 WHERE sname LIKE 王%; 二、…

边界检查C

空指针判断&#xff1a; 在使用指针之前&#xff0c;先判断指针是否为空指针&#xff08;即指针是否为NULL&#xff09;。可以使用if语句或者三目运算符进行判断&#xff0c;例如&#xff1a; int *ptr NULL; if (ptr NULL) {printf("ptr is a null pointer\n"); …

C#基础|StringBuilder字符串如何高效处理。

哈喽&#xff0c;你好&#xff0c;我是雷工。 字符串处理在C#程序开发中是使用频率比较高的&#xff0c;但常规的字符串处理方式对内存占用比较多&#xff0c;为了优化内存&#xff0c;减少不必要的内存浪费&#xff0c;引入了StringBuilder类。 下面学习下StringBuilder类的使…