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.
Example 1:
Input: coins = [1, 2, 5], amount = 11
Output: 3
Explanation: 11 = 5 + 5 + 1
Example 2:
Input: coins = [2], amount = 3
Output: -1
Note:
You may assume that you have an infinite number of each kind of coin.
给定一堆硬币和一个数值,问最少多少硬币能组成给定的数值。
此题可采用DP的思路去解,设状态数组amounts存储构成面值为i所需最少硬币数,状态转移方程可写为amounts[i]=min(amounts[i],amounts[i-coints[j]]+1),coints存储所有的硬币面值
class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
MAX = amount+1
amounts = [(amount + 1)] * (MAX)
amounts[0] = 0
for cur_amount in range(1, amount + 1):
for coin in coins:
if coin <= cur_amount:
amounts[cur_amount] = min(amounts[cur_amount], amounts[cur_amount - coin] + 1)
return -1 if amounts[amount]==MAX else amounts[amount]