Leetcode題解 零錢兌換

2021-10-09 05:54:42 字數 2110 閱讀 2017

注:用揹包問題思想來理解硬幣找零系列問題

for c in coins: # 列舉硬幣總數

for j in range(m, c-1, -1): # 從大到小列舉金額,確保j-c >= 0.

f[j] = min(f[j], f[j - c] + 1)

return f[m] if f[m] != float('inf') else -1 # 如果為inf說明狀態不可達,返回-1即可。

for c in coins: # 列舉硬幣種數

for j in range(c, m+1): # 從小到大列舉金額,確保j-c >= 0.

f[j] = min(f[j], f[j - c] + 1)

return f[m] if f[m] != float('inf') else -1 # 如果為inf說明狀態不可達,返回-1即可。

for k in range(1, s[i]+1): # 列舉每個硬幣的個數 [1, s[i]]

if j >= k*coins[i]: # 確保不超過金額 j

f[j] = min(f[j], f[j - k*coins[i]] + k)

print(f)

return -1 if f[m] > m else f[m]

題解 零錢兌換

give me your money 1 step1 觀察題面,這可以讓我們了解題的型別。編寫乙個函式來計算可以湊成總金額 可以得出這是一道揹包 dp。每種硬幣的數量是無限的 進一步得出這是道完全揹包。題型 完全揹包 最少的硬幣個數 證明這要在揹包的前提下,求出最小組成數量。多組測試資料 謹記多組輸...

零錢兌換 leetcode

思路 建乙個動態陣列dp,大小為amount 1,dp裡面的值初始化為amount 1。dp i 表示總金額i最少可以用dp i 的零錢兌換,如果coins j 比i小,那麼總金額i可以由dp i conis j 再加上這枚零錢構成,dp i min dp i dp i coins j 1 如果dp...

leetcode零錢兌換

1.遞迴 回溯 記錄每種錢幣能夠使用的最大數量,然後遍歷每一種情況,求錢幣數量最小的,但會超時 2.動態規劃 設定dp amount 1 初始值設為0x3f3f3f3f,即為無窮大 dp i 表示總量是i是,coins中的金幣組成i所需的最小金幣個數 此處以錢幣為1 2 5,總額是11舉例 dp 1...