先判断数组数量是否大于3

然后给数组排序,判断前三个数的和是否大于0,如果大于,则return

设置i为三元组的第一个数,l为第二个,r为第三个

从0开始遍历i,l=i+1,r=num.size()-1

然后判断三个数的和--x,当大于0,将r--,小于0,将l++,等于0,l++, r--

删除重复的三元组:----->>当x==0时,如果num[l+1] == num[l],将l++,如果num[r-1]==num[r],将r--;同时,每次遍历开始时如果num[i]==num[i-1],就跳过当前遍历,进入下一轮遍历

 vector<vector<int> > threeSum(vector<int> &num) {
        vector<vector<int> > res;
        if(num.size() < 3)
            return res;
        sort(num.begin(), num.end());
        if(num[0] + num[1] + num[2] > 0)
            return res;
        for(int i = 0; i < num.size() - 2; i++) {
            if(num[i] > 0)
                break;
            if(i && num[i] == num[i-1])
                continue;
            for(int l = i + 1, r = num.size() - 1; l < r;) {
                vector<int> ans;
                int x = num[i] + num[l] + num[r];
                if(x < 0)
                    l++;
                else if(x > 0)
                    r--;
                else {
                    ans.push_back(num[i]);
                    ans.push_back(num[l]);
                    ans.push_back(num[r]);
                    res.push_back(ans);
                    while(num[l] == num[l+1] && l + 1 < r) l++;
                    while(num[r] == num[r-1] && r - 1 > l) r--;
                    l++;
                    r--;
                }
            }
        }
        return res;
    }