当前位置: 首页 > news >正文

滨州正规网站建设价格词爱站的关键词

滨州正规网站建设价格,词爱站的关键词,手机房产网站模板,多说wordpress插件文章目录前言一、零钱兑换II(力扣518)二、组合总和 Ⅳ(力扣377)三、零钱兑换(力扣322)总结前言 1、零钱兑换II 2、组合总和 Ⅳ 3、零钱兑换 一、零钱兑换II(力扣518) 给你一个整数…

文章目录

  • 前言
  • 一、零钱兑换II(力扣518)
  • 二、组合总和 Ⅳ(力扣377)
  • 三、零钱兑换(力扣322)
  • 总结


前言

1、零钱兑换II
2、组合总和 Ⅳ
3、零钱兑换


一、零钱兑换II(力扣518)

给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。

请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。

假设每一种面额的硬币有无限个。

类似与之前的目标和问题(01背包)求有多少种组合方式

目标和

在这里插入图片描述

分析
题目描述中是凑成总金额的硬币组合数,为什么强调是组合数呢?
例如示例一:
5 = 2 + 2 + 1
5 = 2 + 1 + 2
这是一种组合,都是 2 2 1。
如果问的是排列数,那么上面就是两种排列了。
组合不强调元素之间的顺序,排列强调元素之间的顺序

每个硬币可以重复使用,完全背包问题
整数amount 相当于完全背包问题中的背包容量
组合数:不强调元素之间的顺序
动规五部曲:
1、确定dp数组以及下标的含义
dp[j] :表示总金额为j时有dp[j]种方式
2、确定递推公式
dp[j] += dp[j - coins[i]];
3、dp数组如何初始化
dp[0]一定是1,因为dp[0]是在公式中一切递推结果的起源,如果dp[0]是0的话,递推结果将都是0。
4、确定遍历顺序
外层for循环遍历物品(钱币),内层for遍历背包(金钱总额)===组合数
是否可以颠倒?
不可以

外层for遍历背包(金钱总额),内层for循环遍历物品(钱币) ===排列数

class Solution {public int change(int amount, int[] coins) {int[] dp = new int[amount+1];//初始化 类似于目标和问题dp[0]=1;for(int i = 0; i<coins.length;i++){for(int j=coins[i];j<=amount;j++){dp[j] += dp[j-coins[i]];}}return dp[amount];}
}

在这里插入图片描述

二、组合总和 Ⅳ(力扣377)

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。
在这里插入图片描述
分析 :
元素可以重复使用 --> 完全背包问题
求排列数 -->遍历顺序 外层循环背包容量 内层循环元素个数

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

在这里插入图片描述

三、零钱兑换(力扣322)

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

你可以认为每种硬币的数量是无限的。
在这里插入图片描述
分析:
每种硬币的数量是无限的,可以看出是典型的完全背包问题。
1、确定dp数组以及下标的含义
dp[j]:凑足总额为j所需钱币的最少个数为dp[j]
2、确定递推公式
凑足总额为j - coins[i]的最少个数为dp[j - coins[i]],那么只需要加上一个钱币coins[i]即dp[j - coins[i]] + 1就是dp[j]
dp[j] = Math.min(dp[j], dp[j-coins[j]]+1)
3、dp数组初始化
在测试用例中可以发现 dp[0] = 0;
考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,否则就会在min(dp[j - coins[i]] + 1, dp[j])比较的过程中被初始值覆盖。
所以下标非0的元素都是应该是最大值。
4、确定遍历顺序
本题求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。
所以本题并不强调集合是组合还是排列。

class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount+1];int max = Integer.MAX_VALUE;//初始化为最大值for(int i=0;i<dp.length;i++){dp[i] = max;}dp[0] = 0;//遍历for(int i=0;i<coins.length;i++){for(int j=coins[i];j<=amount;j++){if(dp[j-coins[i]]!=max){dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);}}}return dp[amount] == max? -1:dp[amount];}
}

在这里插入图片描述


总结

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

http://www.tj-hxxt.cn/news/58013.html

相关文章:

  • 重庆塔吊证查询网站百度网站提交入口
  • 签约做网站模板吸引人的软文标题
  • 哪有做网站推广鸿星尔克网络营销案例分析
  • 广州市住房和建设局网站网络营销策划步骤
  • 网站备案在哪个网站佛山seo关键词排名
  • 企业网页制作教程和流程免费seo快速排名工具
  • 网站推广定义一键生成原创文案
  • 在线做banner的网站seo外链在线提交工具
  • 闽清县建设局网站91手机用哪个浏览器
  • 如何做网页设计视频播放长沙百度快速优化排名
  • 上海自聊自做网站想做一个网站
  • 南昌做网站哪里好seo关键词排名注册价格
  • 发软文提高网站权重怎么推广自己的网站
  • 做dm页网站长春网站制作企业
  • 怎么做自己的店铺网站幽默软文经典案例300
  • 推广网站wap端怎么做百度app官方下载
  • 端端网站开发磁力猫引擎入口
  • dedecms模板站网页制作软件推荐
  • 海口企业免费建站百度浏览器官方下载
  • 免费网站排名大全新冠病毒最新消息
  • 做网站后台数据库建设如何快速推广一个app
  • 官方网站建设银行年利息是多少二次感染即将大爆发
  • 运城网站建设公司seo专员
  • 做动画合成的视频网站拉新推广
  • 网站建设与管理 需求分析seo服务外包
  • 网站优化的方法seo网站优化助理
  • 厦门网站建设 智多星网络营销推广总结
  • 企业合作的响应式网站百度电脑版网址
  • 俄语网站软文发布平台排名
  • 模板网站系统seo品牌优化整站优化