解题思路:
(1)回溯+剪枝:注意排序后的数组,相邻元素相同不需要重复考虑
class Solution {
public:
vector<vector<int>> vec;
public:
void helper(vector<int> &num,vector<int> &v,int target,int l) {
if(target==0) {
vec.push_back(v);
return;
} else if(target<0) return;
for(int i=l;i<num.size();i++) {
if((i!=l && num[i]!=num[i-1]) || i==l) {
v.push_back(num[i]);
helper(num,v,target-num[i],i+1);
v.pop_back();
}
}
return;
}
vector<vector<int> > combinationSum2(vector<int> &num, int target) {
sort(num.begin(),num.end());
vector<int> v;
helper(num,v,target,0);
return vec;
}
};