
public static List<List<Integer>> threeSum2(int[] nums) {
List<List<Integer>> result = new LinkedList<>();
if (nums == null||nums.length<3) {
return result;
}
Arrays.sort(nums);
for (int i = 0;i<nums.length;i++) {
if (nums[i]>0) {
break;
}
if (i>0&&nums[i] == nums[i-1]) {
continue;
}
int l = i+1;
int r = nums.length-1;
int res = -nums[i];
while (l<r) {
if (nums[l]+nums[r]>res) {
r--;
}else if (nums[l]+nums[r]<res) {
l++;
}else {
List<Integer> list = new LinkedList<>();
list.add(nums[i]);
list.add(nums[l]);
list.add(nums[r]);
result.add(list);
while (l<r && nums[l] == nums[l+1]){
l++;
}
while (l<r && nums[r] == nums[r-1]){
r--;
}
r--;
l++;
}
}
}
return result;
}