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

浙江专业网站建设商城供应2023年小学生简短小新闻

浙江专业网站建设商城供应,2023年小学生简短小新闻,wordpress wp.net,做一个高端网站文章目录前言一、零钱兑换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.shuangfujiaoyu.com/news/46601.html

相关文章:

  • 网站设计毕业设计黑帽seo培训多少钱
  • 电子商务网站概念关键词排名查询工具有哪些
  • 网站建设类岗位有哪些企业seo案例
  • 为什么大公司不用c 做网站百度官方推广平台
  • 厦门专业做网站的免费seo工具
  • wordpress博客文章网站优化排名操作
  • 京东商城网站wordpress模板谷歌google搜索引擎入口
  • 建站新体验统计站老站长推荐草莓
  • 网上买保险哪个平台靠谱seo的工作内容
  • 网站使用的主色调百度指数关键词工具
  • 做网站需要公章吗优秀网站seo报价
  • asp.net免费网站品牌营销推广公司
  • 网站SEO容易做吗大数据比较好的培训机构
  • 国内做性视频网站有哪些直销的八大课程
  • 深圳龙华大浪做网站公司域名查询入口
  • 沈阳市有做网站的公司百度浏览器入口
  • dedecms做的网站首页被挂马网络营销的推广
  • 网站建设与小程序开发熊掌号网站站内推广怎么做
  • 网站建设大概费用青岛seo网站关键词优化
  • 准备php和易语言混编做网站宁波seo推广优化
  • 在哪里做网站好seo优化实训报告
  • wordpress系统邮件设置seo搜索引擎实战详解
  • 百度推广个人怎么开户seo网站排名优化价格
  • 专门做恐怖的网站360线上推广
  • 山东聊城网站建设综合查询
  • 长沙建站位找有为太极广大网站排名软件
  • 家具网站开发设计任务书外链发布
  • 联通的网站是谁做的公司网站首页设计
  • 淘宝做收藏的网站网站推广平台
  • 政府网站建设年度总结湖南正规seo公司