题解 | #三元组#
数组中相加和为0的三元组
http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711
排序 -> 双指针。
``` 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