排序 -> 双指针。
``` java
public class Solution {
public ArrayList<ArrayList<integer>> threeSum(int[] nums) {
if (nums == null || nums.length == 0) return new ArrayList<>();</integer>
Arrays.sort(nums);
ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
int n = nums.length;
for (int i = 0; i < n; i++) {
if (nums[i] > 0) break;
if (i > 0 && nums[i] == nums[i - 1]) continue; // 排重
int l = i + 1;
int r = n - 1;
while (l < r) {
int num1 = nums[i];
int num2 = nums[l];
int num3 = nums[r];
int cul = num1 + num2 + num3;
if (cul == 0) {
ans.add(new ArrayList<>(Arrays.asList(num1,num2,num3)));
while (l < r && nums[l] == nums[l + 1]) l++; // 排重
while (l < r && nums[r] == nums[r - 1]) r--; // 排重
l++;
r--;
} else if (cul > 0) {
r--;
} else {
l++;
}
}
}
return ans;
}}
``` java

京公网安备 11010502036488号