最简单的递归来了(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;
    }
};
全部评论

相关推荐

是每个人事都这样与找工作的人这样沟通吗?正常询问不可以吗
超时空记忆丶:这种人适合跟我聊 我能骂得她心里难受一天,这种byd一看就是欠骂,这么好的机会楼主别错过。
点赞 评论 收藏
分享
白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
点赞 评论 收藏
分享
牛客266927136号:为啥实习经历写这么少,项目经历反而大写特写,最重要的还是实习经历吧,写具体点,什么场景下做了什么事,解决了什么问题,优化了什么场景,性能提升了多少多少
点赞 评论 收藏
分享
评论
5
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务