注:用揹包問題思想來理解硬幣找零系列問題
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...