1. 程式人生 > >letcode 322零錢兌換 python

letcode 322零錢兌換 python

給定不同面額的硬幣 coins 和一個總金額 amount。編寫一個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。

示例 1:

輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
示例 2:

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

解法1:DP

class Solution:
    def coinChange(self, coins, amount):
        """
        :type coins: List[int]
        :type amount: int
        :rtype: int
        """
        n = len(coins)
        # dp[i]表示amount=i需要的最少coin數
        dp = [float("inf")] * (amount+1)
        dp[0] = 0
        for i in range(amount+1):
            for j in range(n):
                # 只有當硬幣面額不大於要求面額數時,才能取該硬幣
                if coins[j] <= i:
                    dp[i] = min(dp[i], dp[i-coins[j]]+1)
        # 硬幣數不會超過要求總面額數,如果超過,說明沒有方案可湊到目標值
        return dp[amount] if dp[amount] <= amount else -1   

執行結果超時