publicList<List<Integer>>threeSum(int[] nums){List<List<Integer>> res =newArrayList<>();if(nums ==null|| nums.length <3){return res;}Arrays.sort(nums);int length = nums.length;for(int i =0; i < length; i++){if(nums[i]>0){break;}if(i >0&& nums[i]== nums[i -1]){continue;}int left = i +1;int right = length -1;while(left < right){int sum = nums[i]+ nums[left]+ nums[right];if(sum ==0){
res.add(Arrays.asList(nums[i], nums[left], nums[right]));while(left < right && nums[left]== nums[left +1]){
left++;}while(left < right && nums[right]== nums[right -1]){
right--;}
left++;
right--;continue;}if(sum <0){
left++;continue;}
right--;}}return res;}
go
import"sort"functhreeSum(nums []int)[][]int{
res :=make([][]int,0)if nums ==nil||len(nums)<3{return res
}
sort.Ints(nums)
length :=len(nums)for i, v :=range nums {if v >0{break}if i >0&& v == nums[i-1]{continue}
left, right := i+1, length-1for left < right {
sum := v + nums[left]+ nums[right]if sum ==0{
res =append(res,[]int{v, nums[left], nums[right]})for left < right && nums[left]== nums[left+1]{
left++}for left < right && nums[right]== nums[right-1]{
right--}
left++
right--continue}if sum <0{
left++continue}
right--}}return res
}