问题:给定一个向量,找到所有唯一的三元组,使得a + b + c = 0(并在向量的向量中返回它们)
以下代码几乎起作用:它查找所有可能的三胞胎,包括重复的三胞胎和多余的三胞胎(即[0,1,-1]和[-1,0, 1]),因此在以下情况下:
[-1,0,1,2,-1,-4]
它返回[-1,0,1],[-1,-1,2],但错误地返回[0,0,0],[2,2,-4]等。
代码:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
vector<int> temp;
temp={};
res={};
if(nums.size()<3)
return res;
fillVector(nums,res,temp);
return res;
}
void fillVector(vector<int> nums, vector<vector<int>>& ans, vector<int>& temp, int sum=0, int beg=0){
//if I find a triplet a+b+c=0, add it to the result
if(sum==0 && temp.size()==3){
ans.push_back(temp);
return;
}
//if the triplet returns a value !=0, don't add to the result
if(temp.size()==3)
return;
for(int i=beg;i<nums.size();++i){
int newSum=sum+nums[i];
temp.push_back(nums[i]);
fillVector(nums,ans,temp,newSum,i);
temp.pop_back();
}
}
为了避免重复,我尝试添加该行
nums.erase(nums.begin()+beg);
在递归调用之前,但不起作用