leetcode 322. 零钱兑换

解题思路

状态:
dp[i] = 组成金额i需要的最小金币数

方程:
dp[i] = min(dp[i - coin[x]]) + 1
0<=x<len(coins)

代码

1
2
3
4
5
6
7
8
9
10
class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
dp = [float('INF')] * (amount + 1)
dp[0] = 0
for i in range(1, amount + 1):
for coin in coins:
if coin > i:
continue
dp[i] = min(dp[i], dp[i-coin] + 1)
return dp[amount] if dp[amount] != float('INF') else -1