一.题目:
给一个代表各类硬币数值的数组,还有一个金额,问凑足这个金额的最小硬币数目,如果凑不齐返回-1.
二.解题思路:
这类问题很明显是用动态规划.直接贴代码吧:
class Solution(object):
def coinChange(self, coins, amount):
"""
:type coins: List[int]
:type amount: int
:rtype: int
"""
dp = [float('inf')] * (amount + 1)
dp[0] = 0
for coin in coins:
for i in range(coin, amount + 1):
if dp[i - coin] != float('inf'):
dp[i] = min(dp[i], dp[i - coin] + 1)
return -1 if dp[amount] == float('inf') else dp[amount]