class Solution {
public:
    vector<vector<int> > threeSum(vector<int> &num) {
        vector<vector<int>> ans;
        int n = num.size();
        if(n < 3)
            return ans;
        sort(num.begin(),num.end());
        for(int i = 0; i < n ; i++){
          // ^_^
            if( i > 0 && num[i] == num[i-1])
                continue;
            int k = n - 1;
            int target = -num[i];
            for(int j = i + 1 ; j < n ; j++){
              // ^_^
                if(j > i + 1 && num[j] == num[j-1])
                    continue;
                while(j < k){
                    if(num[j] + num[k] > target)
                        k--;
                    else if(num[j] + num[k] < target)
                        j++;
                    else{
                        ans.push_back({num[i],num[j],num[k]});
                      // ^_^
                        break;
                    }
                }
            }
        }
        return ans;
        
    }
};