class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
if (nums == null || nums.length < 1)
return result;
// 先排序
Arrays.sort(nums);
for (int i = 0; i <= nums.length - 1; i++) {
if (nums[i] > 0)
break;
if (i > 0 && nums[i] == nums[i-1])
continue;
int target = 0 - nums[i];
// 前后指针扫描
int k = i + 1;
int j = nums.length - 1;
while (k < j) {
if (nums[k] + nums[j] == target) {
List<Integer> list = Arrays.asList(nums[i],nums[k],nums[j]);
result.add(list);
// 跳过重复
while ( k < j && nums[k] == nums[k+1])
k++;
while ( k < j && nums[j] == nums[j-1])
j--;
k++;
j--;
} else if (nums[k] + nums[j] < target)
k++;
else
j--;
}
}
return result;
}
}
参考了一下以下资料:
1. https://blog.csdn.net/qq_35170267/article/details/81031368