Python程式:計算找零所需的硬幣數量


假設我們有不同面額的硬幣(1、5、10、25)和一個總金額amount。我們需要定義一個函式來計算構成該金額所需的最少硬幣數量。例如,如果輸入是64,輸出是7。這是由 25 + 25 + 10 + 1 + 1 + 1 + 1 = 64 組成的。

為了解決這個問題,我們將遵循以下步驟:

  • 如果 amount = 0,則返回 0
  • 如果硬幣陣列的最小值 > amount,則返回 -1
  • 定義一個名為 dp 的陣列,大小為 amount + 1,並將其全部填充為 -1
  • 對於 coins 陣列中的每個 i
    • 如果 i > dp 的長度 - 1,則跳過下一部分,進行下一次迭代
    • dp[i] := 1
    • 對於 j 從 i + 1 到 amount
      • 如果 dp[j - 1] = -1,則跳過下一部分,進行下一次迭代
      • 否則,如果 dp[j] = -1,則 dp[j] := dp[j - i] + 1
      • 否則 dp[j] := dp[j] 和 dp[j - i] + 1 的最小值
  • 返回 dp[amount]

讓我們看看下面的實現,以便更好地理解:

示例

線上演示

class Solution(object):
   def coinChange(self, amount):
      coins = [1,5,10,25]
      if amount == 0 :
         return 0
      if min(coins) > amount:
         return -1
      dp = [-1 for i in range(0, amount + 1)]
      for i in coins:
         if i > len(dp) - 1:
            continue
         dp[i] = 1
         for j in range(i + 1, amount + 1):
            if dp[j - i] == -1:
               continue
            elif dp[j] == -1:
               dp[j] = dp[j - i] + 1
            else:
               dp[j] = min(dp[j], dp[j - i] + 1)
      return dp[amount]
ob1 = Solution()
print(ob1.coinChange(64))

輸入

64

輸出

7

更新於:2020年10月19日

914 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告