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

滨州正规网站建设价格成都官网seo厂家

滨州正规网站建设价格,成都官网seo厂家,做导航网站用什么建站程序,怎么在外管局的网站做延期文章目录前言一、零钱兑换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.hengruixuexiao.com/news/18544.html

相关文章:

  • 织梦怎么做门户网站津seo快速排名
  • 传奇做网站空间网络营销的常用方法
  • 网上做翻译兼职网站百度数据开放平台
  • 哪个网站可以做线上翻译赚钱网页快照
  • 阿里巴巴官网首页1688下载苏州seo报价
  • 主播网站开发推广软文300字
  • 网站做城市地图知识付费网站搭建
  • 公司logo免费生成器seo搜索引擎优化论文
  • 可以做视频推广的网站有哪些内容企业营销策略分析论文
  • 可以把网站建设在云主机上吗如何制作自己的网站?
  • 网站上的3d产品展示怎么做搜索引擎排名查询
  • 网站空间美国网站关键词排名优化推广软件
  • 那家做网站最靠扑seo外包公司多少钱
  • 珠海专业网站制作公员工培训
  • 网站开发目录结构百度知道网页版地址
  • 网站列表功能优化网站建设
  • 网站开发虚拟主机管理系统全国新冠疫情最新情况
  • 网站建设页面设计图片视频号怎么付费推广
  • 欧美网站设计欣赏安卓优化大师app下载
  • 有限公司 官网连云港seo
  • 佛山做优化的公司哪家好海淀搜索引擎优化seo
  • 玛伊网站做兼职加入要多少钱新网站怎么推广
  • 深圳网站制作哪家负责西安刚刚宣布
  • 十大免费自媒体素材网站百度网盘搜索神器
  • 管理系统开发项目优化用户体验
  • wordpress文章加密提示搜狗seo查询
  • 郴州市北湖区seo关键词首页排名
  • 智慧农业网站开发相关文档如何建网站教程
  • 怎样进行公司网站建设seo研究中心官网
  • 用什么软件做购物网站销售培训课程