原题

You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.

Note:
You may assume that you have an infinite number of each kind of coin.

示例

Example 1:
coins = [1, 2, 5], amount = 11
return 3 (11 = 5 + 5 + 1)

Example 2:
coins = [2], amount = 3
return -1.

思路

比较典型的动态规划题目。要确定每个amount最少需要多少硬币,可以用amount依次减去每个硬币的面值,查看剩下总额最少需要多少硬币,取其中最小的加一即是当前amount需要的最少硬币数,这样就得到了递推公式,题目就迎刃而解了。

代码实现

# 动态规划
class Solution(object):def coinChange(self, coins, amount):""":type coins: List[int]:type amount: int:rtype: int"""# 边界条件if amount == 0:return 0# 存储之前计算过的结果dp = [sys.maxint] * (amount + 1)dp[0] = 0# 自底向下编写递推式for i in xrange(1,amount+1):for j in xrange(len(coins)):if (i >= coins[j] and dp[i - coins[j]] != sys.maxint):# 当前数额的最小步数dp[i] = min(dp[i], dp[i - coins[j]] + 1)# 如果最小步数等于最大值,则代表无解return -1 if dp[amount] == sys.maxint else dp[amount]

  

转载于:https://www.cnblogs.com/LiCheng-/p/6694297.html

LeetCode 322. Coin Change相关推荐

  1. leetcode 322. Coin Change | 322. 零钱兑换(动态规划)

    题目 https://leetcode.com/problems/coin-change/ 题解 也许是第一次在没看答案的情况下写的动态规划- 第一反应是,这题不是广义背包吗?想了一下,不是,因为广义 ...

  2. 动态规划 Leetcode 322 Coin Change(零钱兑换)

    题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 链接(中文版):https: ...

  3. LeetCode 518 Coin Change 2 (python)

    目录 LeetCode 518 Coin Change 2 (python) Code 欢迎一起来参与leetcode刷题项目 LeetCode 518 Coin Change 2 (python) ...

  4. leetcode 322. Coin Change-硬币交换|动态规划

    原题链接:322. Coin Change [思路-Java] 本题考查动态规划.也许一开始很容易想到用贪心算法,但是贪心算法在某些情况下是不成立的,比如coins = [1, 3, 5, 6],要a ...

  5. 【Leetcode】Coin Change

    题目链接:https://leetcode.com/problems/coin-change/ 题目: You are given coins of different denominations a ...

  6. 动态规划——零钱兑换(Leetcode 322)

    题目选自Leetcode 322.零钱兑换 想必大家看一眼就明白了(bushi),这就是动态规划的背包问题~ 算法思想 那么,既然知道了这是个动态规划问题,就要思考如何列出正确的状态转移方程? 1.确 ...

  7. Lightoj 1231 - Coin Change (I) (裸裸的多重背包)

    题目链接: Lightoj  1231 - Coin Change (I) 题目描述: 就是有n种硬币,每种硬币有两个属性(价值,数目).问用给定的硬币组成K面值,有多少种方案? 解题思路: 赤果果的 ...

  8. C++coin change 硬币找零(附完整源码)

    coin change 硬币找零 coin change 硬币找零算法的完整源码(定义,实现,main函数测试) coin change 硬币找零算法的完整源码(定义,实现,main函数测试) #in ...

  9. 利用动态规划(DP)解决 Coin Change 问题

    问题来源 这是Hackerrank上的一个比较有意思的问题,详见下面的链接: https://www.hackerrank.com/challenges/ctci-coin-change 问题简述 给 ...

最新文章

  1. mysql 最小日期函数_MySQL 日期加减函数汇总
  2. scala recursive value x$5 needs type
  3. android开发 修改标题栏背景_基于.NET的APP开发方式中MobileForm的使用smobiler
  4. 【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 mobile-ffmpeg 框架 | 完整代码示例 )
  5. linux ubuntu 切换到超级用户失败的解决办法(su 认证失败)
  6. nexus私服搭建及maven生命周期
  7. 黑科技抢先尝 | Windows全新终端初体验(附代码Build全过程)
  8. mac mysql 重设密码_Mac下忘记mysql密码重新设置密码的图文教程
  9. 前端都应懂的入门基础-github基础
  10. 设计模式18_责任链
  11. 机器学习基础(三十八) —— 从几率到逻辑斯函数
  12. vue 项目安装 (入门)
  13. Flex动态创建多个曲线图+柱形图
  14. 数据驱动编程之表驱动法
  15. HCIE-RS面试--STP故障及处置
  16. 运放参数的详细解释和分析-part24, 输出阻抗Ro和Rout
  17. 0x00007FF818BAD646 (ucrtbased.dll)处(位于 通讯录.exe 中)引发的异常: 0xC0000005: 写入位置 0x000000000000000C 时发生访问冲突。
  18. Map集合及三层嵌套
  19. 纪首领浙大计算机学院,趣链科技X浙江大学|区块链技术与应用专题研讨会成功召开...
  20. centos8.2+Tesla T4搭建深度学习运行环境

热门文章

  1. html5 查看图片,html5实现图片预览和查看原图
  2. 数据库:MySQL常见的设计规范误区
  3. 网络知识:交换机中的半双工与全双工知识笔记
  4. Windows终端利器Cmder
  5. 史上最全的Nginx配置参数中文说明
  6. mysql数据库设计中的14个技巧
  7. C# 如何转换生成长整型的时间
  8. opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境
  9. css 菜单栏悬停_在CSS中构建悬停菜单
  10. 读完 Vue 发布源码,小姐姐回答了 leader 的提问,并优化了项目发布流程~