40. 組合總和 ii
給定乙個陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的每個數字在每個組合中只能使用一次。
說明:所有數字(包括目標數)都是正整數。
解集不能包含重複的組合。
示例 1:
輸入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集為:
[ [1, 7],
[1, 2, 5],
[2, 6],
[1, 1, 6]
]示例 2:
輸入: candidates = [2,5,2,1,2], target = 5,
所求解集為:
[ [1,2,2],
[5]]通過次數130,700提交次數203,767
分析
假設整個陣列為c
, 每個數只能使用一次,那麼我們在遍歷的時候,可以先將 c 陣列排序,這樣相同的元素會相鄰,我們比較容易統計出相同元素的個數,然後我們dfs遍歷即可。
dfs的時候,我們統計一下當前元素的個數,那麼當前元素我們可以選擇 1個、2個…,所以需要乙個for迴圈,使用cur陣列記錄我們選擇的元素,到最後dfs完畢之後,記得將 cur 陣列回溯。
class solution
if(u == c.
size()
)return
;// 如果遍歷完畢,則回溯
// k表示下乙個和當前數不同的元素
int k = u +1;
while
(k < c.
size()
&& c[k]
== c[u]
) k++
;int cnt = k - u;
// 與當前數相同的數的個數
// 這個for迴圈很巧妙,
for(
int i =
0; i <= cnt && i * c[u]
<= target; i++
)// 回溯
for(
int i =
0; i <= cnt && i * c[u]
<= target; i++
) cur.
pop_back()
;}vectorint>>
combinationsum2
(vector<
int>
& c,
int target)
};
leetcode 40 組合總和
給定乙個陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的每個數字在每個組合中只能使用一次。說明 示例 1 輸入 candidates 10,1,2,7,6,1,5 target 8,所求解集為 1,7 1,2,...
leetcode40 組合總和 II
給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...
LeetCode 40 組合總和 II
給定乙個陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的每個數字在每個組合中只能使用一次。說明 示例 1 輸入 candidates 10,1,2,7,6,1,5 target 8,所求解集為 1,7 1,2,...