動態規劃 LeetCode322零錢兌換求最優解

2021-10-03 16:15:54 字數 611 閱讀 9271

題目:給定不同面額的硬幣coins和乙個總金額amount,編寫乙個函式來計算湊成總金額的最少硬幣數量,如果沒有任何一種硬幣可以組成總金額,則返回-1。

關於硬幣問題我們可以有3種思路:

貪心演算法:每次選取面值最大的硬幣,但會存在鼠目寸光現象,無法達到最優效果,比如coins=[1,5,11],amount=15,求解amount=111+14,硬幣數量為1+4=5(貪心法),但是15=5*3,硬幣數量更少

暴力列舉,未嘗試,想想就是for迴圈巢狀一大堆

動態規劃–dp,特點:最優子結構,無後效性(本次硬幣數量求最優解採用動態規劃

附官方解答方法三**(自行新增的注釋),方法實在是妙

public

class

leet322}}

//面額*數量=總金額,那dp[amount]一定小於等於總金額

return dp[amount]

> amount ?-1

: dp[amount];}

}

leetcode 322 動態規劃

給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1輸入 coins 2 amount 3 輸出 1說明 你...

leetcode 322 零錢兌換(動態規劃)

給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 示例 2 輸入 coins 2 amount...

leetcode 322 零錢兌換 動態規劃

動態規劃例題1 轉移方程 這個題目即使知道了轉移方程,最後寫出正確的程式也還是很難,有幾個細節需要注意 1.開的結果陣列大小是amount 1,這是因為我們的f x 表示拼成x最少有幾種方式,最後返回f amount 所以陣列開闢amount 1。2.初始條件f 0 0,所以遍歷f i 從i 1開始...