40. 組合總和 ii
給定乙個候選人編號的集合candidates
和乙個目標數target
,找出candidates
中所有可以使數字和為target
的組合。
candidates
中的每個數字在每個組合中只能使用一次。
注意:解集不能包含重複的組合。
示例 1:
輸入: candidates = [10,1,2,7,6,1,5], target = 8,
輸出:[
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]
示例 2:
輸入: candidates = [2,5,2,1,2], target = 5,
輸出:[
[1,2,2],
[5]]
思路: 帶有剪枝的回溯演算法具體可看別人的這篇文章
回溯演算法秒殺所有排列/組合/子集問題 :: labuladong的演算法小抄
class solution
void backtrack(vector& candidates,int index, int target)
if(target<0)return;
for(int i=index;iindex && candidates[i] == candidates[i - 1])
//做選擇
res.push_back(candidates[i]);
backtrack(candidates,i+1,target-candidates[i]);
//撤銷選擇
res.pop_back();}}
};
40 組合總和 II
給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...
40 組合總和 II
給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...
40 組合總和 II
給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 所有數字 包括目標數 都是正整數。解集不能包含重複的組合。示例 1 輸入 candidates 1...