常写常新吧。。。好心累的一题 去重的过程有点复杂了
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res = new ArrayList<>();
// 如果数组中第一个元素大于 0,则直接返回空的结果列表
if (nums[0] > 0) return res;
for (int i = 0; i < nums.length - 2; i++) {
// 避免重复的nums[i]
if (i != 0 && nums[i] == nums[i - 1]) continue;
int left = i + 1;
int right = nums.length - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (sum > 0) {
right--;
} else if (sum < 0) {
left++;
} else { // sum == 0
List<Integer> list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[left]);
list.add(nums[right]);
res.add(list);
// 去重
while (left < right && nums[left] == nums[left + 1]) left++;
while (left < right && nums[right] == nums[right - 1]) right--;
// 继续寻找下一个符合条件的三元组
left++;
right--;
}
}
}
return res;
}
}