class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
if (nums==null||nums.length<3){
return res;
}
Arrays.sort(nums);
for (int i=0;i<nums.length-2;i++){
if (i>0&&nums[i]==nums[i-1]) continue;
if (nums[i]>0) break;
int left = i+1;
int right = nums.length-1;
while(left<right&&nums[right]>=0){
if (nums[i]+nums[left]+nums[right]==0){
List<Integer> resItem = new ArrayList<>();
resItem.add(nums[i]);
resItem.add(nums[left]);
resItem.add(nums[right]);
res.add(resItem);
left++;
while(nums[left]==nums[left-1]&&left<right){
left++;
}
right--;
while(nums[right]==nums[right+1]&&left<right){
right--;
}
}else if (nums[i]+nums[left]+nums[right]<0){
left++;
while(nums[left]==nums[left-1]&&left<right){
left++;
}
}else{
right--;
while(nums[right]==nums[right+1]&&left<right){
right--;
}
}
}
}
return res;
}
}