leetcode-322-零錢兌換
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。leetcode-322-零錢兌換-官方題解
搜尋回溯 [超出時間限制]
動態規劃(自頂向下)
動態規劃(自底向上)
這種題是很明顯的動態規劃。
我對動態規劃不是特別熟練,因此第一時間沒有思路,想的是乙個二維的陣列,發現並不能推出結果。我在草稿紙上畫了一下寫出了乙個一位陣列的狀態轉移方程:
dp[i] = min(dp[i],dp[i-coins[j]]+1)
這是乙個自底向上方法,這樣的狀態轉移方程是可以求出結果的,但是需要注意一些細節、邊界問題。
我的**是這樣的
class solution
}count[rem - 1] = min == int_max ? -1 : min;
return count[rem - 1];
}public:
int coinchange(vector& coins, int amount)
};
322 零錢兌換
class solution 不是大的取的越多越好,大的取的很多,最後不能剛好取到,比如22,陣列是10,6,你直接取兩個10肯定不行第乙個數有取1個,取0個或者取多個好幾種取法。比如18,你有10和6,那麼10乙個都不能取 所以要考慮的只是當前這一位可以取幾個 for int i left coi...
322 零錢兌換
最值問題 最優子結構特性 子問題重疊特性 使用動態規劃 狀態轉移方程 列出狀態轉移方程 步驟 1.明確狀態 原問題和子問題中變化的量 amount 連續性變化 2.定義動態規劃陣列 函式的含義 dp n 的含義 湊成n需要的硬幣個數 3.明確選擇 對於每個狀態,可以做出什麼選擇來改變當前狀態 選乙個...
322 零錢兌換
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 1。示例 1 輸入 coins 1,2,5 amount 11 輸出 3 解釋 11 5 5 1 示例 2 輸入 coins 2 amount...