最简单的递归来了(c++)

数组中相加和为0的三元组

http://www.nowcoder.com/questionTerminal/345e2ed5f81d4017bbb8cc6055b0b711

(1)由于a<=b<=c 使用排序,将数组从下到大排序,这样递归的结果永远都是啊a<=b<=c;
(2)递归+回溯+剪支

class Solution {
public:
    void gen(int i,set<vector<int>> &res,vector<int> &temp,vector<int> &num,int sum,int target,vector<vector<int>> &result){
         //剪支
        if(i>=num.size()||temp.size()>3) return;
        if(temp.size()==3&&sum!=target) return;
        sum+=num[i];
        temp.push_back(num[i]);
       //边界条件
        if(temp.size()==3&&sum==target&&res.find(temp)==res.end()){
            result.push_back(temp);
            res.insert(temp);
            //return;
        }
        gen(i+1,res,temp,num,sum,target,result);
        //回溯
        sum-=num[i];
        temp.pop_back();
        gen(i+1,res,temp,num,sum,target,result);
    }
    vector<vector<int> > threeSum(vector<int> &num) {
        vector<vector<int>> result;
        set<vector<int>> res;
        if(num.size()==0) return result;
        vector<int> temp;
       //排序
        sort(num.begin(),num.end());
        gen(0,res,temp,num,0,0,result);
        return result;
    }
};
全部评论

相关推荐

挣K存W养DOG:玩小红书玩的,觉得自己很幽默😅
点赞 评论 收藏
分享
评论
5
2
分享

创作者周榜

更多
牛客网
牛客企业服务