头脑风暴之零钱兑换,扩散你的思维
题目
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。
你可以认为每种硬币的数量是无限的。
示例1:
输入:coins = [1, 2, 5], amount = 11
输出:3
解释:11 = 5 + 5 + 1
复制代码
示例2:
输入:coins = [2], amount = 3
输出:-1
复制代码
示例3:
输入:coins = [1], amount = 0
输出:0
复制代码
提示:
- 1 <= coins.length <= 12
- 1 <= coins[i] <= 2^31 - 1
- 0 <= amount <= 10^4
解题思路
根据题意,本题可采用动态规划的方式来求解。
第一步,确定dp数组以及下标的含义:
dp[j]:凑足总额为j所需钱币的最少个数为dp[j]。
第二步,确定递推公式: 分俩种情况: 第一种,dp[j],考虑coins[i],那只有从 dp[j - coins[i]] 来推导; 第二种,凑足总额为 j - coins[i] 的最少个数为dp[j - coins[i]],那么只需要加上一个钱币 coins[i],表达式为 dp[j - coins[i]] + 1。
所以dp[j] 要取所有 dp[j - coins[i]] + 1 中最小的。
递推公式为:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);
第三步,dp 数组初始化:
dp[0] = 0。
第四步,确定遍历顺序:
本题求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。
代码实现
class Solution {public int coinChange(int[] coins, int amount) {int max = amount + 1;int[] dp = new int[amount + 1];Arrays.fill(dp, max);dp[0] = 0;for (int i = 1; i <= amount; i++) {for (int j = 0; j < coins.length; j++) {if (coins[j] <= i) {dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);}}}return dp[amount] > amount ? -1 : dp[amount];}
}
复制代码
最后
时间复杂度:O(Sn),其中 S 是金额,n 是面额数。
空间复杂度:O(S)。
如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论,共同进步
头脑风暴之零钱兑换,扩散你的思维相关推荐
- 头脑风暴法利用计算机让大家进行思想交流,个人与团队管理期末复习
(2010.12.08)个人与团队管理期末复习答疑(文本) 第一部分:单项选择题 1.关于头脑风暴法,说法不正确的是( B ). (A)头脑风暴法是一种创造性的思维方法 (B)在头脑风暴法中不切合实际 ...
- 头脑风暴与德尔菲技术的介绍与区别
头脑风暴 头脑风暴(Brainstorming)是一种以集体讨论的形式,鼓励创意思维和产生新想法的方法.它旨在通过放松限制,鼓励参与者自由发挥,不受批评和否定的限制,从而产生尽可能多的新想法. 通常, ...
- ASBSO:具有灵活搜索长度和基于记忆选择的改进头脑风暴优化
ASBSO:具有灵活搜索长度和基于记忆选择的改进头脑风暴优化 参考文献 <ASBSO: An Improved Brain Storm Optimization With Flexible Se ...
- c++ 多重背包状态转移方程_背包问题之零钱兑换
读完本文,你可以去力扣拿下如下题目: 518.零钱兑换II ----------- 零钱兑换 2 是另一种典型背包问题的变体,我们前文已经讲了 经典动态规划:0-1 背包问题 和 背包问题变体:相等子 ...
- 头脑风暴是如何毁掉创意的?
2019独角兽企业重金招聘Python工程师标准>>> 设 想以下场景:你在思考公司下一步的发展战略.为了集思广益得到最好的方案,你召集了团队里面的人一起开会.原本你是这样想的,一次 ...
- 【沟通之道】头脑风暴-女人的心思你别猜
作者:范军 (Frank Fan)新浪微博:@frankfan7 微信:GetToCloud 一位大叔在海边低着头没精打采的走着,远处天空的黑云慢慢压了过来,他也是一脸愁云惨雾.他想发泄一下, ...
- dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)
BSO讲解https://www.zhihu.com/video/1252605855767736320 B站搜索:随心390,同步观看视频 各位小伙伴可在闲鱼搜索 优化算法交流地,即可搜索到官方闲鱼 ...
- MATLAB实战系列(二十九)-头脑风暴优化(BSO)算法求解旅行商问题(TSP)-交叉算子
前言 代码明细可参见 MATLAB实战系列(八)-头脑风暴优化(BSO)算法求解旅行商问题(TSP)(附MATLAB代码) 交叉算子的实现机制 我们还是以求解TSP问题为例,8个城市的坐标如下所示. ...
- Interview:算法岗位面试—10.15上午—上海某公司算法岗位(偏图像算法,制造行业)技术面试考点之AI算法与实际场景结合产生商业价值的头脑风暴
Interview:算法岗位面试-10.15上午-上海某公司算法岗位(偏图像算法,制造行业)技术面试考点之AI算法与实际场景结合产生商业价值的头脑风暴 导读:一心想去互联网,未必能够发挥自己最大价值, ...
最新文章
- weibo4j中的 jar解释
- 数据结构和算法分析:第二章 算法分析
- 腐烂国度2巨霸版计算机学知识,《腐烂国度2巨霸版》新手攻略 新手入门玩法技巧大全...
- add git 指定类型文件夹_UE4 使用git配合远程仓库
- 定义列表的特点html,HTML的列表表格表单知识点
- 在Bootstrap开发框架中使用bootstrap-datepicker插件
- Java进阶之对象克隆(复制)
- 扒开医院的围墙,互联网怎么个战法?
- win7系统两台电脑之间利用Socket实现文件传输---C++实现
- python手册中文版pdf-python中文官方文档 PDF 下载
- java的一些课程设计题目_Java课程设计
- 信息系统项目管理重点:供应链管理(SCM)
- 【黑苹果教程】说点闲话
- APISpace 人像比对API
- KingbaseES的表空间
- Maven deploy项目到私服报错
- win10系统下安装tensorflow总结
- 回收垃圾字符的3种方法
- Google的不作恶文化和10大信条
- BLOCK层代码分析(10)IO下发之IO下发函数总结