classSolution{public:vector<vector<int>>threeSum(vector<int>&nums){if(nums.size()<3)return{};vector<vector<int>>ans;sort(begin(nums),end(nums));for(inti=0;i+2<nums.size();++i){if(i>0&&nums[i]==nums[i-1])continue;// Choose nums[i] as the first num in the triplet,// and search the remaining nums in [i + 1, n - 1]intl=i+1;intr=nums.size()-1;while(l<r){constintsum=nums[i]+nums[l]+nums[r];if(sum==0){ans.push_back({nums[i],nums[l++],nums[r--]});while(l<r&&nums[l]==nums[l-1])++l;while(l<r&&nums[r]==nums[r+1])--r;}elseif(sum<0){++l;}else{--r;}}}returnans;}};
classSolution{publicList<List<Integer>>threeSum(int[]nums){if(nums.length<3)returnnewArrayList<>();List<List<Integer>>ans=newArrayList<>();Arrays.sort(nums);for(inti=0;i+2<nums.length;++i){if(i>0&&nums[i]==nums[i-1])continue;// Choose nums[i] as the first num in the triplet,// and search the remaining nums in [i + 1, n - 1]intl=i+1;intr=nums.length-1;while(l<r){finalintsum=nums[i]+nums[l]+nums[r];if(sum==0){ans.add(Arrays.asList(nums[i],nums[l++],nums[r--]));while(l<r&&nums[l]==nums[l-1])++l;while(l<r&&nums[r]==nums[r+1])--r;}elseif(sum<0){++l;}else{--r;}}}returnans;}}