双指针思想
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
//加条件判断
Arrays.sort(nums);
int len = nums.length;
for(int i=0;i<len;i++){
int l = i+1;
int r = len-1;
if(i > 0 && nums[i] == nums[i-1]){
continue;
}
while(l<r){
int sum = nums[i] + nums[l] + nums[r];
if(sum == 0){
List<Integer> list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[l]);
list.add(nums[r]);
ans.add(list);
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 {
r--;
}
}
}
return ans;
}