思想:
与上一题相比多了previous,即如果前面的这一层已经试验过了该数,就跳过它。
class Solution {
public:
//Combination Sum II
void dfs(vector<int> num, int target, int pos, vector<int> &value, vector<vector<int>> &res) {
if(target == 0) {
res.push_back(value);
return;
}
int previous = -1;
for(int i = pos; i < num.size(); i++) {
if(target < num[i]) {
return;
}
if(previous == num[i]) continue;
value.push_back(num[i]);
previous = num[i];
dfs(num,target-num[i],i+1,value,res);
value.pop_back();
}
}
vector<vector<int> > combinationSum2(vector<int> &num, int target) {
sort(num.begin(),num.end());
vector<vector<int>> res;
vector<int> value;
dfs(num,target,0,value,res);
return res;
}
};