链接https://leetcode-cn.com/problems/combination-sum-ii/description/
本来以为输出一定要严格按照标准答案的顺序,没想到只要对应上就行了,这里搞了好久。
还有就是学到了一个为vector去重的方法:
vector<vector<int>>::iterator iter=unique(ans.begin(),ans.end());
ans.erase(iter,ans.end());
这个方法只能处理两个相近的数
比如说 1,2,3,3,4,5,5,6
输出 1,2,3,4,5,6
但是如果你相邻的两个数不是连在一起的
比如说 1,2,3,4,5,6,3,5
就会输出 1,2,3,4,5,6,3,5
所以建议先sort一下要去重的vector,然后再使用此方法!
sort(ans.begin(),ans.end());
vector<vector<int>>::iterator iter=unique(ans.begin(),ans.end());
ans.erase(iter,ans.end());
AC代码:
class Solution {
public:
vector<vector<int>> ans;
vector<int> temp;
vector<int> number;
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
number=candidates;
DFS(0,0,target);
DFS(0,0,target);
set<vector<int>>res_ans;
sort(ans.begin(),ans.end());
vector<vector<int>>::iterator iter=unique(ans.begin(),ans.end());
ans.erase(iter,ans.end());
return ans;
}
void DFS(int index,int sum,int target)
{
if(sum==target)
{
sort(temp.begin(),temp.end());
ans.push_back(temp);
return;
}
if(sum>target||index==number.size()) return;
temp.push_back(number[index]);
DFS(index+1,sum+number[index],target);
temp.pop_back();
DFS(index+1,sum,target);
}
};