1.找零錢的最少硬幣數
322. coin change (medium)
題目:給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。
示例 1:
輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
示例 2:
輸入: coins = [2], amount = 3
輸出: -1
說明:你可以認為每種硬幣的數量是無限的。
思路:**:
class solution
}return dp[amount] > amount ? -1 : dp[amount];//如果存在和為amount的組合,此時陣列元素dp[amount]的值就會發生改變}}
2.找零錢的硬幣組合數
518. coin change 2 (medium)
題目:給定不同面額的硬幣和乙個總金額。寫出函式來計算可以湊成總金額的硬幣組合數。假設每一種面額的硬幣有無限個。
示例 1:
輸入: amount = 5, coins = [1, 2, 5]
輸出: 4
解釋: 有四種方式可以湊成總金額:
5=55=2+2+1
5=2+1+1+1
5=1+1+1+1+1
示例 2:
輸入: amount = 3, coins = [2]
輸出: 0
解釋: 只用面額2的硬幣不能湊成總金額3。
示例 3:
輸入: amount = 10, coins = [10]
輸出: 1
思路:這個題也是乙個完全揹包問題。使用陣列dp[i]表示總金額為i時,硬幣的組合數,此時初始化每乙個陣列元素為0.但這個也好像動態規劃一類的題。最後總金額為i的組合數等於不加當前的硬幣時總金額就已經達到i的硬幣組合數和加入當前硬幣(此時的總金額數為i-硬幣的面值)。
**:class solution
}return dp[amount];}}
3.組合總和
377. combination sum iv (medium)
題目:給定乙個由正整數組成且不存在重複數字的陣列,找出和為給定目標正整數的組合的個數。
示例:nums = [1, 2, 3]
target = 4
所有可能的組合為:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
請注意,順序不同的序列被視作不同的組合。
因此輸出為 7。
高階:如果給定的陣列中含有負數會怎麼樣?
問題會產生什麼變化?
我們需要在題目中新增什麼限制來允許負數的出現?
思路:是乙個有順序的完全揹包問題,這個之前沒有見過,補充一下.在leetcode中的討論裡面有大神說,這個一般的揹包問題是物品迴圈在外迴圈,揹包的重量部分在內迴圈;但是一旦涉及到物品順序的問題時,只需要將揹包的重量部分放在外迴圈,內迴圈是物品的迴圈就可以了。還要注意的是這裡有乙個將陣列先排序的操作。
**:public int combinationsum4(int nums, int target)
int maximum = new int[target + 1];
maximum[0] = 1;
arrays.sort(nums);
for (int i = 1; i <= target; i++)
}return maximum[target];
}
Leetcode揹包問題
題意 幾種無限數量的硬幣,湊成amount的方案數,方案是無序的,即1 2 和 2 1算同一種 題解 方法一 經典揹包解法 dp i j 表示前i個物品湊出j的方案數,考慮第i個選與不選兩種情況,其中選的時候,再考慮選擇第i個物品的次數。class solution return dp n amou...
leetcode筆記 揹包問題總結1
這部分內容是參考大神cyc2018的 和總結,將leetcode中和揹包問題相關的放在這裡。1.字串按單詞列表分割 139.word break medium 這個問題也可以使用揹包問題的思路,把這個 放在問題139中了。2.劃分陣列為相等的兩部分 416.partition equal subse...
leetcode的揹包問題
有n件物品和乙個容量為v的揹包。第i件物品的費用是w i 價值是v i 求將哪些物品裝入揹包可使價值總和最大。定義陣列 dp i j 代表前i個商品,放入乙個容量為j的揹包,所獲得的最大價值初始化 如果要求恰好放滿揹包,則陣列初始化為 inf dp inf amount 1 for in range...