322.零钱兑换
解法一:dp
dp[6] = min(dp[1] + 1, dp[4] + 1, dp[5] + 1)
6块钱找零由 【1块钱的找法】+5块 【4块钱的找法】+2块 【5块钱的找法】+1块 三者的最小值决定class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
dp = [sys.maxsize] * (amount+1) #因为是求最小值,因此用∞为初值
dp[0] = 0 #初始条件
for i in range(1, amount+1): #从1开始一次遍历
for coin in coins: #遍历所有硬币面值
if i < coin: #钱数比币值还小,跳过
continue
#关键,状态转移方程,求所有币值凑成i元的最少硬币数
dp[i] = min(dp[i], dp[i-coin] + 1)
return -1 if dp[amount] == sys.maxsize else dp[amount]最后更新于