1 public class Solution { 2 public static List > threeSum(int[] nums) { 3 List > res = new ArrayList<>(); 4 Arrays.sort(nums); 5 int length = nums.length; 6 for(int i=0; i 0 && nums[i]==nums[i-1]) { 9 continue;10 }11 int leftP = i+1;12 int rightP = length-1;13 while(leftP 0) {18 rightP -= 1;19 } else {20 res.add(Arrays.asList(nums[i], nums[leftP], nums[rightP]));21 // 内层的左指针去重方法,注意是一直到不重复,所以用while22 while (leftP < rightP && nums[leftP]==nums[leftP+1]) {23 leftP += 1;24 }25 // 内层的右指针去重26 while (leftP < rightP && nums[rightP]==nums[rightP-1]) {27 rightP -= 1;28 }29 leftP += 1;30 rightP -= 1;31 }32 }33 }34 35 return res;36 }37 }