原题目:https://leetcode-cn.com/problems/combination-sum-ii/
思路:
先排序,然后使用 if(i>index &&can[i] == can[i-1]) continue; 语句来去重
代码:
class Solution {
vector<vector<int>> ans;
void dfs(vector<int> & candidates,vector<int>& tmp,int target, int index){
if(target == 0){
ans.push_back(tmp);return;
}
if(target<0) return;
for(int i=index;i<candidates.size();i++){
if(i>index && candidates[i] == candidates[i-1]) continue;
tmp.push_back(candidates[i]);
dfs(candidates,tmp,target-candidates[i],i+1);
tmp.pop_back();
}
}
public:
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
vector<int> tmp;
dfs(candidates,tmp,target,0);
return ans;
}
};