https://leetcode-cn.com/problems/combination-sum-ii/
这一题就是很普通的递归回溯问题在于如何去重
实际上只要每一层只能选择一次那么就不会有重复的(使用了这个数进行过往下一层递归以后都不能用这个数再去和下一层递归了)
也就是排序然后判断一下就行
class Solution {
public:
vector<vector<int>>ans;
vector<int >temp;
set<int>S;
void solve(vector<int>&nums,int target,int index)
{
if(target == 0)
{
ans.push_back(temp);
return ;
}
for(int i = index;i<nums.size();++i)
{
if(i > index && nums[i] == nums[i -1])continue;
if( target - nums[i] >=0)
{
temp.push_back(nums[i]);
solve(nums,target - nums[i],i+1);
temp.pop_back();
}
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
// outputVector(candidates);
solve(candidates,target,0);
return ans;
}
};