难点在于不能重复
1.将数组进行排序
2.找到合适组合后将三个指针都要进行向后去重操作
1 class Solution { 2 public List<List<Integer>> threeSum(int[] nums) { 3 Arrays.sort(nums); 4 List<List<Integer>> ans = new ArrayList<>(); 5 int n = nums.length; 6 for (int i = 0; i < n - 2; ++i) { 7 int x = nums[i]; 8 if (i > 0 && x == nums[i - 1]) continue; // 跳过重复数字 9 int j = i + 1, k = n - 1; 10 while (j < k) { 11 int s = x + nums[j] + nums[k]; 12 if (s > 0) k--; 13 else if (s < 0) j++; 14 else { 15 ans.add(List.of(x, nums[j], nums[k])); 16 j=j+1; 17 while(j < k&&nums[j] == nums[j - 1]){ 18 j++; 19 } 20 //for (j=j+1; j < k && nums[j] == nums[j - 1]; ++j); // 跳过重复数字 21 k=k-1; 22 while(j < k&&nums[k] == nums[k + 1]){ 23 k--; 24 } 25 //for (k=k-1; k > j && nums[k] == nums[k + 1]; --k); // 跳过重复数字 26 } 27 } 28 } 29 return ans; 30 } 31 }
标签:nums,int,三数,++,Q32,while,LeetCode15,&&,ans From: https://www.cnblogs.com/cff1/p/18246869