-
Notifications
You must be signed in to change notification settings - Fork 0
40_CombinationSumII
a920604a edited this page Apr 14, 2023
·
1 revision
title: 40. Combination Sum II
找出所有組合總和為target 的子序列,每個元素只能取一次,每組組合必須唯一。
if(i>l && candidates[i-1]==candidates[i]) continue;
skip depulicate
class Solution {
public:
void backtracking(vector<int>& candidates, int target, int l, vector<int>& path, vector<vector<int>>& ret){
if(target<0) return;
if(target == 0){
ret.push_back(path);
return;
}
for(int i=l;i<candidates.size() ; ++i){
// avoid duplicate
if(i>l && candidates[i-1]==candidates[i]) continue;
if(target < candidates[i]) return;
path.push_back(candidates[i]);
backtracking(candidates, target - candidates[i], i+1, path, ret);
path.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
vector<vector<int>> ret;
vector<int> path;
backtracking(candidates, target, 0, path, ret);
return ret;
}
};
- time complexity
O(len(nums)^M)
, M if theight of our recursive - space complexity
L
, L is the longest combination
footer