39 組合總和(每日一題)

2021-10-24 12:20:54 字數 1156 閱讀 1218

給定乙個無重複元素的陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。

candidates 中的數字可以無限制重複被選取。

說明:所有數字(包括 target)都是正整數。

解集不能包含重複的組合。

示例 1:

輸入:candidates = [2,3,6,7], target = 7,

所求解集為:

[[7],

[2,2,3]

]示例 2:

輸入:candidates = [2,3,5], target = 8,

所求解集為:

[[2,2,2,2],

[2,3,3],

[3,5]

]1 <= candidates.length <= 30

1 <= candidates[i] <= 200

candidate 中的每個元素都是獨一無二的。

1 <= target <= 500

昨天一道dfs+回溯,今天又是dfs,有意思。首先給陣列排下序,可以更好的優化時間(sum加上當前值大於目標值,若陣列後還有元素則不用遍歷)。由於題目要求是可以無限制選取數字的組合,所以用乙個索引記錄當前選取值的下標,遞迴後從這個索引開始繼續遍歷(不然會出現排列,而不是組合)。當sum+當前值<=target時,把當前值加入組合tem裡。如果加上當前值等於target,則把tem加到list中,並在新增後移除最後乙個元素(把tem賦值給tem0,是因為tem是乙個物件位址,進行移除最後乙個元素操作後,最終list是空的)

1ms是怎麼做到的,好奇啊

每日一題 32組合總和

給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 所有數字 包括 target 都是正整數。解集不能包含重複的組合。示例 1 輸入 candid...

每日一題 40 組合總和II

每日一題?40.組合總和ii 思考 看來我還在回溯的窩裡,一直都沒有出去 這題的難點應該是在剪枝。首先按照39題的方法,將回溯函式中的引數由i改為i 1,但依舊有重複元素出現,為何 因為陣列本身就有重複元素,最後一步刪去的元素和下一步加進來的元素相等,這種情況我們需要剪枝剪掉 list res ne...

216 組合總和 III(每日一題)

找出所有相加之和為 n 的 k 個數的組合。組合中只允許含有 1 9 的正整數,並且每種組合中不存在重複的數字。說明 所有數字都是正整數。解集不能包含重複的組合。示例 1 輸入 k 3,n 7 輸出 1,2,4 示例 2 輸入 k 3,n 9 輸出 1,2,6 1,3,5 2,3,4 有毒吧,這幾天...