数组中找三个数和为0的结果集
1 // 解法一:先排序 然后固定一个值 然后用求两个数的和的方式
2 public static List<List<Integer>> threeSum(int[] nums) {
3 List<List<Integer>> res = new ArrayList<>();
4 if (nums.length < 3) {
5 return res;
6 }
7 Arrays.sort(nums);
8 // 遍历到倒数第三个就可以了
9 for (int i = 0; i < nums.length - 2; i++) {
10 // i去重复
11 if (i != 0 && nums[i] == nums[i - 1])
12 continue;
13 int j = i + 1;
14 int k = nums.length - 1;
15 while (j < k) {
16 if (nums[i] + nums[j] + nums[k] == 0) {
17 List<Integer> list = new ArrayList<>();
18 list.add(nums[i]);
19 list.add(nums[j]);
20 list.add(nums[k]);
21 res.add(list);
22 j++;
23 k--;
24 // 去重复
25 while (j < k && nums[j - 1] == nums[j]) {
26 j++;
27 }
28 while (j < k && nums[k] == nums[k + 1]) {
29 k--;
30 }
31 } else if (nums[i] + nums[j] + nums[k] < 0) {
32 j++;
33 } else {
34 k--;
35 }
36 }
37 }
38 return res;
39 }