https://www.cnblogs.com/FYZHANG/p/11854433.html
参考官方第三种解法,自下而上
https://leetcode-cn.com/problems/coin-change/solution/322-ling-qian-dui-huan-by-leetcode-solution/
labuladong的动态规划做题思路
https://leetcode-cn.com/problems/coin-change/solution/322-ling-qian-dui-huan-by-ac_fun-afrb/
https://leetcode-cn.com/problems/fibonacci-number/solution/dong-tai-gui-hua-tao-lu-xiang-jie-by-labuladong/
写出状态转移方程
这个题目应该是正序的,当我们计算到f[x]时,f[x-1],f[x-2],f[x-5]都已经得到结果了
class Solution(object):
def coinChange(self, coins, amount):
"""
:type coins: List[int]
:type amount: int
:rtype: int
"""
# 1.确定base case
dp = [amount+1]*(amount+1)
dp[0] = 0
# 2.从面值为1开始,计算其最优dp值
for coin in coins:
for i in range(coin, amount+1):
dp[i] = min(dp[i], dp[i - coin] + 1)
return dp[amount] if dp[amount] != amount+1 else -1