题目分析 该题目利用双指针加排序该题目的难点在于去除重复 那么如何去除重复呢?除去重复的第一个元素i对于每一个i,除去重复的l和r Java代码 public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> res = new ArrayList<>(); Arrays.sort(nums); for(int i=0;i<nums.length;i++){ if(nums[i]>0){ return res; } int l = i+1; int r = nums.length-1; // 去除重复的i if(i>0 && nums[i]==nums[i-1]){ continue; } while(l<r){ if(nums[i] + nums[l] + nums[r] == 0){ List<Integer> list = new ArrayList<>(); list.add(nums[i]); list.add(nums[l]); list.add(nums[r]); res.add(new ArrayList<>(list)); // 去除重复的l和r while(l<r && nums[l]==nums[l+1]){ l++; } while(l<r && nums[r]==nums[r-1]){ r--; } // 调整l和r,遍历所有i产生的三元组 l++; r--; }else if(nums[i] + nums[l] + nums[r] < 0){ l++; }else{ r--; } } } return res; }