题目描述
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例
思路
代码如下
public List<List<Integer>> threeSum(int[] nums) {
int len = nums.length;
Arrays.sort(nums);
List<List<Integer>> res = new ArrayList<>();
for(int i = 0;i < len - 2;i++){
if(i > 0 && nums[i] == nums[i-1]) continue;
if(nums[i] + nums[i+1] + nums[i+2] > 0) break;
if(nums[i] + nums[len-2] + nums[len-1] < 0) continue;
int j = i + 1;
int k = len - 1;
while(j < k){
int sum = nums[i] + nums[j] + nums[k];
if(sum < 0){
j++;
}else if(sum > 0){
k--;
}else{
List<Integer> list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[j]);
list.add(nums[k]);
res.add(list);
j += 1;
while(j < k && nums[j] == nums[j-1]){
j++;
}
k -= 1;
while(j < k && nums[k] == nums[k+1]){
k--;
}
}
}
}
return res;
}