零钱兑换Python解法
生活随笔
收集整理的這篇文章主要介紹了
零钱兑换Python解法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給你一個整數數組 coins ,表示不同面額的硬幣;以及一個整數 amount ,表示總金額。
計算并返回可以湊成總金額所需的 最少的硬幣個數 。如果沒有任何一種硬幣組合能組成總金額,返回?-1 。
你可以認為每種硬幣的數量是無限的。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/coin-change
?
例:
輸入:coins = [1, 2, 5], amount =11輸出:3解釋:11 = 5 + 5 + 1# 解析:動態規劃,從總金額1開始遍歷,若當前金額大于數組中正在判斷的金額,那么減去硬幣的值得到的值可以在前面的金額中找到,若找不到即為-1,找到了則加上這枚硬幣即可(硬幣數目加一),每個硬幣都判斷完后,符合要求的情況再求出硬幣最少的情況。
class Solution(object):def coinChange(self, coins, amount):""":type coins: List[int]:type amount: int:rtype: int"""res = [0 for i in range(amount + 1)] # 初始化為0,因為下標的原因多一位for i in range(1, amount+1): # 對目標金額以及小于它的所有金額進行遍歷cost = float('inf') # 消耗數目初始化為無窮大,因為要找最小值for c in coins: # 對數組中的硬幣進行判斷if i - c >= 0: # 如果當前值大于硬幣值,那么減去可獲得之前的金額數cost = min(cost, res[i - c] + 1) # 在之前的金額數上加一然后與之前的消耗數目比較,選出數目最小的那種情況res[i] = cost # 然后將最少的情況放入dp數組if res[amount] == float('inf'): # 判斷,如果dp數組的目標金額存放位置為無窮大(inf)說明沒有可以實現的情況return -1 # 返回-1else:return res[amount] # 存在直接返回數值即可?
總結
以上是生活随笔為你收集整理的零钱兑换Python解法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中float(‘inf‘)代
- 下一篇: 最大子数组和Python解法