My Seventy-fifth Page - 组合总和Ⅳ - By Nicolas
创始人
2024-02-13 11:15:11
0

这篇page是针对leetcode上的377.组合总和Ⅳ所写的。小尼先简单的说明一下这道题,就是给出一个由不同整数组成的数组nums,和一个目标整数target,需要从nums中造出并发返回总和为targey的元素的个数和。

小尼在这里做一个总结,在我们的完全背包问题里面分为排列和组合问题,没错就是我们高中所学的排列和组合问题,次题就是一个典型的排列问题,排列是讲究顺序的,也就是说,我们在排列的时候(1,2)和(2,1)是有区别的,小尼在这里也给出一个结论:

如果是求组合问题就是外层for循环遍历物品,内层是for循环遍历背包。

如果是求排列问题就是外层for循环遍历背包,内层for循环遍历物品。

小尼接下来讲一下这道题的动规五部曲:

1、确定dp数组以及下标的含义:dp[i]:凑成目标正整数为i的排列个数为dp[i]

2、确定递推公式:dp[i]可以由dp[i - nums[j]]推导出来,因为只要得到nums[i],排列个数dp[i - nums[j]],就是dp[i]的一部分。

3、dp数组如何初始化:其实就是dp[0] = 1就好了,因为我们的初始数不可以为0

4、确定递归顺序:因为这道题是一个组合问题,所以这道题的外层是遍历背包,内层是遍历物品

5、导出dp数组:只需要做一个导出工作即可

接下来小尼拉一下这道题解题的代码:

class Solution {public int combinationSum4(int[] nums, int target) {int[] dp =  new int[target + 1];dp[0] = 1;for(int i = 0;i <= target; i++){for(int j = 0; j < nums.length; j++){if(i >= nums[j]){dp[i] += dp[i - nums[j]];}}}return dp[target];}
}

这道题其实没有特俗的地方,小尼其实希望跟大家分享的地方就是这里为什么就是会判断出组合而非排列,就是因为在这种条件下我们进行的遍历就是先判断将背包不断地放满的个数然后就是我们内层就是每一个物品都是可以取进去的,所以我们就会组成排列,我们可以看看小尼写的上一篇文章,那道题就是一个典型的组合问题,因为上一道题中我们的物品每一次取都是恒定的,也就是说我们只是考虑前面背包装满的情况,然后我们在多种的情况下进行装包,不论我们的情况是怎么样,我们装入的物品的大小一直都是恒定的,这样我们就不会出现后续还会出现之前出现过了的物品,这样就是达到我们组合的目的。

希望上面的讲解和代码段可以帮助到小伙伴们~~~

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...