class Solution {
public static List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
int n = nums.length;
if(n < 3 || nums==null){
return ans;
}
Arrays.sort(nums);
for(int i = 0;i < n;i++){
if(nums[i]>0) break;
if(i>0 && nums[i]==nums[i-1]){
continue;
}
int l = i+1;
int r = n-1;
while(l<r){
int sum = 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--;
}
l++;
r--;
}
else if(sum<0){
l++;
}
else if(sum>0){
r--;
}
}
}
return ans;
}
}