Time: 20190906
Type: Medium

题目描述

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。

示例 1:

输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1
示例 2:

输入: coins = [2], amount = 3
输出: -1
说明:
你可以认为每种硬币的数量是无限的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/coin-change
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

状态定义

f[i]表示到总额度为i时使用的硬币数量。

状态转移方程

当前硬币可以有两种选择:

  • 不取

f[i] = min(f[i], f[i-coin] + 1)

最后再根据结果判断是不是真的可以凑成这样的零钱方案。

代码

class Solution:def coinChange(self, coins: 'List[int]', amount: 'int') -> 'int':f = [float("inf")]  * (amount + 1)f[0] = 0for i in range(1, amount + 1):for coin in coins:if i - coin >= 0:f[i] = min(f[i], f[i-coin] + 1)return f[-1] if f[-1]!= float("inf") else -1

PS.本题解法众多,值得深究一下其他解法,比如带备忘录的自顶向下动态规划法。

END.

Leetcode 322.零钱兑换相关推荐

  1. leetcode: 322.零钱兑换

    322.零钱兑换 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/coin-change/ 给你一个整数数组 coins ,表示不同面额的硬币:以及一 ...

  2. LeetCode 322. 零钱兑换(DP)

    文章目录 1. 题目信息 2. 解题 2.1 回溯穷举 2.2 动态规划 1. 题目信息 给定不同面额的硬币 coins 和一个总金额 amount. 编写一个函数来计算可以凑成总金额所需的最少的硬币 ...

  3. golang力扣leetcode 322.零钱兑换

    322.零钱兑换 322.零钱兑换 题解 代码 322.零钱兑换 322.零钱兑换 题解 //state: dp[i]金额为i时所需最少硬币个数 //function: dp[i]=dp[i-n]+1 ...

  4. Java实现 LeetCode 322 零钱兑换

    322. 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输 ...

  5. [LeetCode] 322.零钱兑换 五种方法讲解

    322.零钱兑换 五种方法讲解 文章目录 322.零钱兑换 五种方法讲解 1 问题描述 2 问题分析 3 解决策略 3.1 递归-暴力解决 3.2 递归-加入存储 3.3 BFS 3.4 动态规划-自 ...

  6. LeetCode 322. 零钱兑换

    322. 零钱兑换 难度 中等 给你一个整数数组 coins ,表示不同面额的硬币:以及一个整数 amount ,表示总金额. 计算并返回可以凑成总金额所需的 最少的硬币个数 .如果没有任何一种硬币组 ...

  7. Leetcode.322 零钱兑换

    索引iii表示 amountamountamount 金额,dp[i]dp[i]dp[i] 表示最少 coinscoinscoins 个数. 递归 class Solution {int res = ...

  8. leetcode 322. 零钱兑换 思考分析

    目录 1.题目 2.思路分析 3.参考链接 1.题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总 ...

  9. 99. Leetcode 322. 零钱兑换 (动态规划-完全背包)

    步骤一.确定状态: 确定dp数组及下标含义 dp数组是个amout+1的数组,dp[j]表示的是装满容量为j的背包所需要的最 少物品的个数 步骤二.推断状态方程: 对于当前物品i, 有两种选择决定了d ...

最新文章

  1. 分享个网盘,个人觉得很不错!
  2. 26期20180628 shell 命令操作 通配符 输出输入重定向
  3. java 能不能回收 文件流_Java文件流关闭和垃圾回收机制
  4. [JS] - onmusewheel事件(兼容IE,FF,opera,safari,chrome)
  5. Express请求处理-静态资源的处理
  6. error C3872: '0x3000': this character is not allowed in an identifier 解决方法
  7. StackExchange.Redis 使用-配置
  8. 博士论文:教你如何给女朋友送礼物
  9. P4590-[TJOI2018]游园会【dp套dp】
  10. 使用opencv和python实现图像的智能处理_机器学习:使用opencv和python进行智能图像处理...
  11. 在网页在播放flv格式的视频
  12. android 常用软件包
  13. VirtualBox 安装增强功能
  14. React+Antd兼容ie浏览器,360安全浏览器兼容模式
  15. 温度转换 python
  16. Because You Loved Me歌词
  17. 涅普之rce(远程代码控制)
  18. 第二章补充____微分中值定理及导数应用
  19. Nginx反向代理到另外一台服务器,域名解析IP变更后连接超时
  20. 老毛子(华硕)固件ipv6及dmz主机设置

热门文章

  1. python爬虫对比_Python六大框架对比,Web2py略胜一筹|python爬虫|python入门|python教程...
  2. 企业信息化投入中咨询服务_嘉萱企业管理咨询服务 让发展中的企业真正实现全面性效益增长...
  3. C++为什么空格无法输出_那些C/C++程序员该具备的32个编程修养习惯!
  4. java关键字static_Java中的static关键字
  5. jQuery first()和last()函数示例
  6. scala 提取器模式匹配_Scala提取器应用,取消应用和模式匹配
  7. Spring Boot –无法确定数据库类型NONE的嵌入式数据库驱动程序类
  8. 开课吧:AI智能语言产品会运用到哪些技术?
  9. Java开发大厂面试资料,让你的面试不再困难!
  10. Java基础:什么是返回对象