【算法与数据结构】377、LeetCode组合总和 Ⅳ

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述

二、解法

  思路分析:本题明面上说是组合,实际上指的是排列。动态规划排列组合背包问题需要考虑遍历顺序。 d p [ i ] dp[i] dp[i]指的是nums数组中总和为target的元素排列的个数。 d p [ i ] dp[i] dp[i]可以由 d p [ i − n u m s [ j ] ] dp[i-nums[j]] dp[inums[j]]推导出来。因此递推公式为 d p [ i ] + = d p [ i − n u m s [ j ] ] dp[i] += dp[i - nums[j]] dp[i]+=dp[inums[j]] d p [ 0 ] dp[0] dp[0]初始化为1,其他元素初始化为0。因为是排列问题,排列问题需要先遍历背包容量,后遍历物品。如果把遍历nums(物品)放在外循环,遍历target的作为内循环的话,举一个例子:计算dp[4]的时候,结果集只有 {1,3} 这样的集合,不会有{3,1}这样的集合,因为nums遍历放在外层,3只能出现在1后面。C++测试用例有两个数相加超过int的数据,所以需要在if里加上dp[i] < INT_MAX - dp[i - num]。
  程序如下

class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector<int>dp(target + 1, 0);dp[0] = 1;for (int i = 0; i <= target; i++) {  // 遍历背包容量for (int j = 0; j < nums.size(); j++) {    // 遍历物品if (i - nums[j] >= 0 && dp[i] < INT_MAX - dp[i - nums[j]]) {dp[i] += dp[i - nums[j]];}}}return dp[target];}
};

复杂度分析:

  • 时间复杂度: O ( t a r g e t ∗ n ) O(target*n) O(targetn),n是nums数组长度。
  • 空间复杂度: O ( t a r g e t ) O(target) O(target)

三、完整代码

# include <iostream>
# include <vector>
using namespace std;class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector<int>dp(target + 1, 0);dp[0] = 1;for (int i = 0; i <= target; i++) {  // 遍历背包容量for (int j = 0; j < nums.size(); j++) {    // 遍历物品if (i - nums[j] >= 0 && dp[i] < INT_MAX - dp[i - nums[j]]) {dp[i] += dp[i - nums[j]];}}}return dp[target];}
};int main() {Solution s1;vector<int> nums = { 1,2,3 };int target = 4;int result = s1.combinationSum4(nums, target);cout << result << endl;system("pause");return 0;
}

end

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

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

相关文章

快速了解工业交换机

工业交换机是专门为工业环境设计的数据通信设备。该设备的主要作用是满足工业控制系统对数据通信的要求&#xff0c;实现不同设备之间的数据传输和网络连接。工业交换机在适应恶劣环境、抗干扰和稳定性等方面表现更出色&#xff0c;相较于传统的商用交换机。 它的基本原理是利用…

打开json文件,读取里边的每一行数据,每一行数据是一个字典,使用matplotlib画图

这段代码的目的是读取 JSON 文件&#xff0c;提取关键信息&#xff0c;然后使用 Matplotlib 绘制四个子图&#xff0c;分别显示不同的指标随着 iter 变化的情况。这种图形化分析有助于直观地了解模型的性能。 画图结果如下&#xff1a; json文件格式如下&#xff1a;下面只粘贴…

centos7.9MINI系统安装后无法挂载磁盘

1、执行mount 无效&#xff0c;尝试"mount /dev/sdb /data" yum -y install ntfs-3g yum install ntfsprogs yum list ntfs* 执行挂载&#xff1a; mount ntfs-3g -t /dev/sdb /data/ 仍然无效2、考虑重新分区 查看要分区的盘符 fdisk -l yum install gdisk …

51单片机LED点阵屏

LED点阵屏 LED点阵屏是一种由许多小型LED灯组成的矩阵式显示屏。这些LED灯可以是单色、双色或全彩的&#xff0c;它们排列成行和列的网格&#xff0c;可以根据需要点亮来显示图像、文字或动画等内容。LED点阵屏广泛应用于户外广告牌、室内显示、交通信号灯、电子价格标签和其他…

three.js从入门到精通系列教程004 - three.js透视相机(PerspectiveCamera)滚动浏览全景大图

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>three.js从入门到精通系列教程004 - three.js透视相机&#xff08;PerspectiveCamera&#xff09;滚动浏览全景大图</title><script src"js/three.js"&g…

链路聚合原理与配置

链路聚合原理 随着网络规模不断扩大&#xff0c;用户对骨干链路的带宽和可靠性提出了越来越高的要求。在传统技术中&#xff0c;常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽&#xff0c;但这种方案需要付出高额的费用&#xff0c;而且不够灵活。采用…

Xcode查看APP文件目录

一、连接真机到MAC电脑上 二、打开Devices 点击window -> Devices and Simulatores 三、选中设备、选择app 四、选择下载内容 五、查看文件内容 得到的文件 右键显示包内容&#xff0c;获得APP内数据 六、分发证书无法下载 使用分发的证书无法下载文件内容&#xf…

大模型的学习路线图推荐—多维度深度分析【云驻共创】

&#x1f432;本文背景 近年来&#xff0c;随着深度学习技术的迅猛发展&#xff0c;大模型已经成为学术界和工业界的热门话题。大模型具有数亿到数十亿的参数&#xff0c;这使得它们在处理复杂任务时表现得更为出色&#xff0c;但同时也对计算资源和数据量提出了更高的要求。 …

性能优化-HVX 指令介绍

「发表于知乎专栏《移动端算法优化》」 本文主要介绍了 HVX 指令相关的知识&#xff0c;包括 HVX 寄存器相关内容&#xff0c;指令的背景依赖&#xff0c;部分常用 intrinsic HVX 指令。具体指令的详细内容及使用还需阅读 HVX 的指令文档&#xff0c;以及细致的实践操作。 &…

ML:2-2-2 sigmoid 函数的替代方案

文章目录 1. sigmoid function的替代方案2. 如何选择activation function3. 为什么模型需要activation function 【吴恩达p62-64】 1. sigmoid function的替代方案 来看上周的例子&#xff0c;预测一个商品是否能成为消冠。这里的awareness可能是binary的。人们要么知道/不知道…

kafka参数配置参考和优化建议 —— 筑梦之路

对于Kafka的优化&#xff0c;可以从以下几个方面进行思考和优化&#xff1a; 硬件优化&#xff1a;使用高性能的硬件设备&#xff0c;包括高速磁盘、大内存和高性能网络设备&#xff0c;以提高Kafka集群的整体性能。 配置优化&#xff1a;调整Kafka的配置参数&#xff0c;包括…

钡铼新品 BL120 Modbus工业协议转换网关

随着物联网技术的迅猛发展&#xff0c;人们深刻认识到在智能化生产和生活中&#xff0c;实时、可靠、安全的数据传输至关重要。在此背景下&#xff0c;高性能的物联网数据传输解决方案——协议转换网关应运而生&#xff0c;广泛应用于工业自动化和数字化工厂应用环境中。 钡铼…