[518][中等][动态规划][背包] 零钱兑换 II
题目描述
输入: amount = 5, coins = [1, 2, 5]
输出: 4
解释: 有四种方式可以凑成总金额:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1输入: amount = 3, coins = [2]
输出: 0
解释: 只用面额2的硬币不能凑成总金额3。输入: amount = 10, coins = [10]
输出: 1解题思路
最后更新于
输入: amount = 5, coins = [1, 2, 5]
输出: 4
解释: 有四种方式可以凑成总金额:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1输入: amount = 3, coins = [2]
输出: 0
解释: 只用面额2的硬币不能凑成总金额3。输入: amount = 10, coins = [10]
输出: 1最后更新于
class Solution:
def change(self, amount: int, coins: List[int]) -> int:
dp = [float('inf')] * (amount + 1)
dp[0] = 1
for coin in coins:
for i in range(coin, amount + 1):
if dp[i - coin] != float('inf'):
dp[i] = dp[i] + dp[i - coin] if dp[i] != float('inf') else dp[i - coin]
return dp[-1] if dp[-1] != float('inf') else 0