首页 > 学院 > 开发设计 > 正文

322. Coin Change -Medium

2019-11-11 05:02:21
字体:
来源:转载
供稿:网友

Question

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.

给你一组不同面额的钱以及资金总额。找到使用硬币组合成该资金总额的最少数量。如果没法组合得到,返回-1

Example

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


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

Solution

动态规划解。定义dp[i]:使用硬币组合成资金总额i的最少数量,递推关系式:dp[i] = min(dp[i - coin]) + 1 (coin in coins)。因为dp[i]都需要加上硬币面额中的一个(当然硬币面额一定要小于资金总额),所以我们只要找出到底加上哪个硬币面额使用硬币数量最少即可。对于没法组合得到的资金总额,我们只需初始化的时候设置一个固定较大值,它并不会被更新到

class Solution(object): def coinChange(self, coins, amount): """ :type coins: List[int] :type amount: int :rtype: int """ dp = [0] + [amount + 1] * amount for a in range(1, amount + 1): for c in coins: # 只对小于amount的硬币进行判断 if a >= c: dp[a] = min(dp[a], dp[a - c] + 1) # 如果amount不能被硬币组合得到,那么它对应的d[amount]不会更新 return dp[amount] if dp[amount] != amount + 1 else -1
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表