当前位置: 首页 > 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.yidumall.com/news/48574.html

相关文章:

  • 蓬莱网站建设联系电话而的跟地seo排名点击软件
  • 怎么在赶集网上做招聘网站seo网站外包公司
  • 如何做公司宣传网站seo咨询推广找推推蛙
  • 海口网络建站模板优化网站的目的
  • 做电影网站的软件整站优化代理
  • 请问网上有没有比较好的网站可以做照片书的呀?要求质量比较好的!怎么让付费网站免费
  • python基础教程文档陕西网络营销优化公司
  • 微信做淘宝客网站整合营销的特点有哪些
  • 天津建站模板抖音seo搜索优化
  • 可以做文档赚钱的网站成都seo优化排名推广
  • 公司新建了网站以前的就网站可以全部删除吗长沙seo网站
  • 新手学做网站vs品牌策划与推广方案
  • 韶关做网站的谷歌商店paypal三件套
  • 类似于wordpress的关键词优化怎么操作
  • 青海做网站多少钱国际新闻界官网
  • 宠物发布网站模板sem是什么
  • 建设部网站危房鉴定标准规定广点通官网
  • 主机托管网站天天seo伪原创工具
  • dedecms做多语言的网站seo网站编辑是做什么的
  • 求职网站网页设计seo优化实训报告
  • 做招牌的网站深圳关键词优化平台
  • 官方网站作用优秀企业网站模板
  • 如何做百度推广的网站青岛的seo服务公司
  • 龙岗做网站多少钱搜关键词网站
  • 用台电脑做网站查看别人网站的访问量
  • 网站后台查找软件百度知道答题赚钱
  • 花生壳做网站是否稳定网页百度网盘
  • wordpress 子站点站长素材音效下载
  • 网站建设优化服务策划新手seo入门教程
  • 淘宝客做网站怎么操作seo软文推广工具