力扣 題目40 組合總和 II

2022-10-10 14:24:15 字數 1478 閱讀 9417

在力扣 題目39-- 組合總和中我們做過類似的題

而40題多加了條件 即 有重複數字而且每個數只能選一次

其實我們可以從39題條件轉換一下,即無限制重複被選取->有限制重複被選取

例如 candidates = [2,5,2,1,2]

就是 1可以取1次 2可以取3次 5可以取1次

這樣的話就簡單了 我們只要在39題的基礎上加入限制數量 於是稍加改造即可

使用map容器 key做為數字 value作為數量 而且map也可以自動排序 

在39題的基礎上加入

如果value為0則不選

如果value不為0則選 並且value-1

1 #include2 #include3 #include4 #include5

using

namespace

std;

6int binationsum(map& m, int &target, map::iterator position, int add, vector& test, vectorint>>&res)715

//四種情況 2.小於 add是上一輪給的值 如果這個數+it->first小於了 說明有可能成為解 更新一下add 繼續遞迴

16else

if (add + it->first

26//

四種情況 3.等於 add是上一輪給的值 如果這個數+it->first等於了 說明test加上it->first就是解 直接給res

27else

if(add + it->first ==target)

2833

//四種情況 4.大於 add是上一輪給的值 如果這個數 + it->first大於了 說明無解 直接返回 退出

34else37}

38return0;

39}4041

class

solution

51else

5255

}56 vectorint>>res;

57 vectortest;

58//

呼叫59 binationsum(m, target, m.begin(), 0

, test, res);

60return

res;61}

62};

63int

main() ;

66int target = 5

;67 vectorint>> res =sol.combinationsum2(candidates, target);

68for (int i = 0; i < res.size(); i++)

72 cout <

74 }

view code

力扣40組合綜合II

對candidates進行遞減排序,從最大的元素開始依次與target進行比較 有三種情況出現 1,元素 target 該元素不可選,跳過該元素 2,元素 target 選擇該元素後,所構成的乙個vec元素組合之和滿足等於target 3,元素 需要注意的地方 什麼時候從vec的放入元素和拿出元素。...

40 組合總和 II

給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...

40 組合總和 II

給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...