class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num int整型vector 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > threeSum(vector<int>& num) {
        // write code here
        // vector<vector<int> > res;
        // if(num.size()<3) return res;
        // sort(num.begin(),num.end());//升序排列
        
        // for(int i=0;i<num.size()-2;i++){
        //     if(i!=0 && num[i]==num[i-1]) continue;
        //     for(int j=i+1;j<num.size()-1;j++){
        //         if(j>i+1 && num[j]==num[j-1]) continue;
        //         for(int z=j+1;z<num.size();z++){
        //             if(z>j+1 && num[z]==num[z-1]) continue;
        //             if(num[i]+num[j]+num[z] == 0) res.push_back({num[i],num[j],num[z]});
        //         }
        //     }
        // }
        // return res;
        vector<vector<int> > res;
        if(num.size()<3) return res;
        sort(num.begin(),num.end());//升序排列
        
        for(int i=0;i<num.size()-2;i++){
            if(i!=0 && num[i]==num[i-1]) continue;
            int l =i+1,r = num.size()-1;
            while(l<r){
                int temp = num[i]+num[l]+num[r];
                if(temp>0) { r--;}
                else if(temp<0) {l++;}
                else{ 
                    res.push_back({num[i],num[l],num[r]});
                    while(num[l]==num[l+1] && l+1<r) l++;
                    while(num[r]==num[r-1] && r-1>l) r--;
                    l++;
                    r--;}
            }
        }
        return res;
    }
};