难度:Medium ?:856
题目
给定不同面额的coins和一个总值,计算出有多少个unique的组合。
coins可以无限使用。
思路
如果是要输出全部的组合,这是一个简单的combination sum问题。
类似题目39。
但是这里只需要组合数,可以用动态规划快速解决。
先初始化一个数组,长度为amout+1;
dp[0] = 1, 其他取值0。
遍历coins,当看到新的面额的coin,更新:
dp[n+coin] += dp[n]
其中n取值在0 ~ (amout-coin)
解答
class Solution:
def change(self, amount: int, coins: List[int]) -> int:
dp = [0] * (amount + 1)
dp[0] = 1
for coin in coins:
for n in range(amount - coin + 1):
dp[n + coin] += dp[n]
return dp[amount]