letcode 322零錢兌換 python
阿新 • • 發佈:2018-12-08
給定不同面額的硬幣 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
執行結果超時