leetcode筆記 揹包問題總結2

2021-09-24 12:07:25 字數 1927 閱讀 5755

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...