题目

给你一个整数数组 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)。

如果对大家有所帮助,希望大家点赞支持,有什么问题也可以在评论区里讨论,共同进步

头脑风暴之零钱兑换,扩散你的思维相关推荐

  1. 头脑风暴法利用计算机让大家进行思想交流,个人与团队管理期末复习

    (2010.12.08)个人与团队管理期末复习答疑(文本) 第一部分:单项选择题 1.关于头脑风暴法,说法不正确的是( B ). (A)头脑风暴法是一种创造性的思维方法 (B)在头脑风暴法中不切合实际 ...

  2. 头脑风暴与德尔菲技术的介绍与区别

    头脑风暴 头脑风暴(Brainstorming)是一种以集体讨论的形式,鼓励创意思维和产生新想法的方法.它旨在通过放松限制,鼓励参与者自由发挥,不受批评和否定的限制,从而产生尽可能多的新想法. 通常, ...

  3. ASBSO:具有灵活搜索长度和基于记忆选择的改进头脑风暴优化

    ASBSO:具有灵活搜索长度和基于记忆选择的改进头脑风暴优化 参考文献 <ASBSO: An Improved Brain Storm Optimization With Flexible Se ...

  4. c++ 多重背包状态转移方程_背包问题之零钱兑换

    读完本文,你可以去力扣拿下如下题目: 518.零钱兑换II ----------- 零钱兑换 2 是另一种典型背包问题的变体,我们前文已经讲了 经典动态规划:0-1 背包问题 和 背包问题变体:相等子 ...

  5. 头脑风暴是如何毁掉创意的?

    2019独角兽企业重金招聘Python工程师标准>>> 设 想以下场景:你在思考公司下一步的发展战略.为了集思广益得到最好的方案,你召集了团队里面的人一起开会.原本你是这样想的,一次 ...

  6. 【沟通之道】头脑风暴-女人的心思你别猜

    作者:范军 (Frank Fan)新浪微博:@frankfan7   微信:GetToCloud   一位大叔在海边低着头没精打采的走着,远处天空的黑云慢慢压了过来,他也是一脸愁云惨雾.他想发泄一下, ...

  7. dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)

    BSO讲解https://www.zhihu.com/video/1252605855767736320 B站搜索:随心390,同步观看视频 各位小伙伴可在闲鱼搜索 优化算法交流地,即可搜索到官方闲鱼 ...

  8. MATLAB实战系列(二十九)-头脑风暴优化(BSO)算法求解旅行商问题(TSP)-交叉算子

    前言 代码明细可参见 MATLAB实战系列(八)-头脑风暴优化(BSO)算法求解旅行商问题(TSP)(附MATLAB代码) 交叉算子的实现机制 我们还是以求解TSP问题为例,8个城市的坐标如下所示. ...

  9. Interview:算法岗位面试—10.15上午—上海某公司算法岗位(偏图像算法,制造行业)技术面试考点之AI算法与实际场景结合产生商业价值的头脑风暴

    Interview:算法岗位面试-10.15上午-上海某公司算法岗位(偏图像算法,制造行业)技术面试考点之AI算法与实际场景结合产生商业价值的头脑风暴 导读:一心想去互联网,未必能够发挥自己最大价值, ...

最新文章

  1. weibo4j中的 jar解释
  2. 数据结构和算法分析:第二章 算法分析
  3. 腐烂国度2巨霸版计算机学知识,《腐烂国度2巨霸版》新手攻略 新手入门玩法技巧大全...
  4. add git 指定类型文件夹_UE4 使用git配合远程仓库
  5. 定义列表的特点html,HTML的列表表格表单知识点
  6. 在Bootstrap开发框架中使用bootstrap-datepicker插件
  7. Java进阶之对象克隆(复制)
  8. 扒开医院的围墙,互联网怎么个战法?
  9. win7系统两台电脑之间利用Socket实现文件传输---C++实现
  10. python手册中文版pdf-python中文官方文档 PDF 下载
  11. java的一些课程设计题目_Java课程设计
  12. 信息系统项目管理重点:供应链管理(SCM)
  13. 【黑苹果教程】说点闲话
  14. APISpace 人像比对API
  15. KingbaseES的表空间
  16. Maven deploy项目到私服报错
  17. win10系统下安装tensorflow总结
  18. 回收垃圾字符的3种方法
  19. Google的不作恶文化和10大信条
  20. BLOCK层代码分析(10)IO下发之IO下发函数总结

热门文章

  1. 电脑强制关机两次后报错自动修复你的电脑未正确启动
  2. 达梦非模式对象—表空间、用户、角色、权限
  3. 读书笔记之《自控力》
  4. Windows 环境升级 PHP 8
  5. KBPC610-ASEMI整流方桥6A 1000V
  6. VM虚拟机下载之开启就蓝屏
  7. css 加载图片,纯CSS图片预加载
  8. 杂-CVPR2013 吴佳俊 Harvesting Mid-level Visual Concepts from Large-scale Internet Images
  9. 掌控安全:安全领域知识图谱
  10. fileitem方法_FileItem类的常用方法