先定义dp,再找base和转移
def change(self, amount, coins):
"""
:type amount: int
:type coins: List[int]
:rtype: int
"""
#dp定义硬币组成j的方法的个数
#base dp[0] = 1
#转移方程: dp[i] = dp[i]+dp[i-coin]
dp = [0]*(amount+1)
dp[0] = 1
for coin in coins:
for i in range(coin,amount+1):
dp[i] = dp[i]+dp[i-coin]
return dp[amount]
定义复杂了
def change(self, amount, coins):
"""
:type amount: int
:type coins: List[int]
:rtype: int
"""
#dp定义前i个硬币组成j的方法的个数
#base dp[i][0] = 1, dp[0][i] = 0
#转移方程: dp[i][j] = dp[i-1][j] + dp[i][j-coin] #因为是完全背包
n = len(coins)
dp = [[0]*(amount+1) for i in range(n+1)]
for i in range(n+1):
dp[i][0] = 1
for i in range(1,n+1):
for j in range(1,amount+1):
if j >= coins[i-1]:
dp[i][j] = dp[i-1][j] + dp[i][j-coins[i-1]]
else:
dp[i][j] = dp[i-1][j]
return dp[n][amount]