題目:給定不同面額的硬幣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開始...