刷題37 零錢兌換 力扣)

2022-07-28 04:33:12 字數 864 閱讀 2728

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

輸入: coins = [1, 2, 5], amount = 11

輸出: 3

解釋: 11 = 5 + 5 + 1

輸入: coins = [2], amount = 3

輸出: -1

說明:你可以認為每種硬幣的數量是無限的。

動態規劃

根據示例1分析:

硬幣面值分別為:1,2,5,總金額是11,現在假設 dp[i] 是 總金額為 i 的時候的最優解法的硬幣數;

因為有三種不同的面值,所以求11有3種方法,分別是:1+dp[10];1+dp[8];1+dp[6];

因此把求11的最優解轉換為分別以上3種解法最優的的一種,也就是硬幣數量最少的一種,即dp[11] = math.min(1+dp[10], 1+dp[8], 1+dp[6])

推導出狀態轉移方程:dp[i] = math.min( dp[i-coin]+1, dp[i-coin]+1, dp[i-coin]+1 ,……)

coin有多少種就比較多少次,coin有多少種取決於不同的硬幣面值有幾種。

對於dp[10]、dp[8]、dp[6]再按照上面的步驟分解。

/**

* @param coins

* @param amount

* @return

*/var coinchange = function(coins, amount) }}

return dp[amount] === infinity ? -1 : dp[amount];

};

力扣 兌換零錢

題目 給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1 通過動態規劃來進行求解 首先可以將問題拆分成相等的子問題,假設dp n 等於構成n元的最少的硬幣數,那麼dp n dp n m 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...

leedcode 零錢兌換

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