给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
示例 1:
输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1
示例 2:
输入: coins = [2], amount = 3
输出: -1
# Dynamic Programming bottom-up
# Pseudo Code
# if the cell[i] == -1:
# cell[i] = cell[i-coin] +1
# else:
# cell[i] = min(cell[i-coin]+1,cell[i])
def coinChange(coins,amount):
dp = [0] + [-1]*amount
for i in range(amount):
if dp[i]<0:
continue
for coin in coins:
if i+coin>amount:
continue
if dp[i+coin]<0 or dp[i+coin] > dp[i]+1:
dp[i+coin] = dp[i]+1
return dp[amount]