class Solution {
public:
int target;
vector<int> nums;
vector<vector<int>> result;
vector<int> tmp;
bool used[31];
int cnt = 0;
int sum = 0;
void dfs(int x){
sum += nums[x];
this->tmp.push_back(nums[x]);
if(sum == target){
this->result.push_back(this->tmp);
}
for(int i = x; i < nums.size() - 1 && sum < target; i ++){
if( i > x && nums[i + 1] == nums[i]){
continue;
}
// cout << nums[x] << " " << sum << endl;
dfs(i+1);
}
sum -= nums[x];
this->tmp.pop_back();
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
this->target = target;
sort(candidates.begin(), candidates.end());
this->nums = candidates;
for(int i = 0; i < nums.size(); i ++){
if(i && nums[i] == nums[i - 1]){
continue;
}
dfs(i);
}
return this->result;
}
};
感觉代码有点冗余,以后想想优化