无法使用递归“组合和”方法处理重复项

时间:2018-07-09 23:22:30

标签: c++ recursion combinations

问题:给定一个向量,找到所有唯一的三元组,使得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);

在递归调用之前,但不起作用

0 个答案:

没有答案