1public List<List<Integer>> threeSum(int[] nums) {
2 List<List<Integer>> result = new ArrayList<>();
3 Arrays.sort(nums);
4
5 for (int i = 0; i < nums.length - 2; i++) {
6 if (i > 0 && nums[i] == nums[i - 1]) {
7 continue;
8 }
9
10 int left = i + 1;
11 int right = nums.length - 1;
12
13 while (left < right) {
14 int sum = nums[i] + nums[left] + nums[right];
15
16 if (sum == 0) {
17 result.add(Arrays.asList(nums[i], nums[left], nums[right]));
18
19 while (left < right && nums[left] == nums[left + 1]) {
20 left++;
21 }
22 while (left < right && nums[right] == nums[right - 1]) {
23 right--;
24 }
25
26 left++;
27 right--;
28 } else if (sum < 0) {
29 left++;
30 } else {
31 right--;
32 }
33 }
34 }
35
36 return result;
37}