老卫带你学---leetcode刷题(322. 零钱兑换)

322. 零钱兑换

问题:

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。

示例 1:

输入: coins = [1, 2, 5], amount = 11
输出: 3 
解释: 11 = 5 + 5 + 1

示例 2:

输入: coins = [2], amount = 3
输出: -1

解决:

思想:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

python 代码:
class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        dp=[-1]*(amount+1)
        dp[0]=0
        for i in range(1,amount+1):
            for j in range(len(coins)):
                if(i-coins[j]>=0 and dp[i-coins[j]]!=-1):
                    if(dp[i]==-1 or dp[i]>dp[i-coins[j]]+1):
                        dp[i]=dp[i-coins[j]]+1
        return dp[amount]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章