Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
The solution set must not contain duplicate triplets.
Example:
Given array nums = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
解法
即是对每一个独有的数,寻找两个能与它加起来等于0的数,对每一个独有的数是遍历,对另外两个数的寻找是头和尾的双指针,所以处理之前要先进行排序。因为要去除重复的,所以每次都要跳过一样的数。
python
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
res=[]
nums.sort()
for i in range(len(nums)-2):
if(i>0 and nums[i]==nums[i-1]):
continue
l,r=i+1,len(nums)-1
while(l<r):
s=nums[i]+nums[l]+nums[r]
if(s<0):
l+=1
elif(s>0):
r-=1
else:
res.append([nums[i],nums[l],nums[r]])
while(l<r and nums[l]==nums[l+1]):
l+=1
while(l<r and nums[r]==nums[r-1]):
r-=1
l+=1
r-=1
return res
java
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res=new ArrayList<List<Integer>>();
int n = nums.length;
Arrays.sort(nums);
int l,r;
for(int i=0;i<n-2;i++)
{
if(i>0&&nums[i]==nums[i-1]){
continue;
}
l=i+1;
r=n-1;
while(l<r){
int sum = nums[i]+nums[l]+nums[r];
if(sum>0){
r--;
}
else if(sum<0){
l++;
}
else{
res.add(Arrays.asList(nums[i],nums[l],nums[r]));
while(l<r&&nums[l]==nums[l+1]){
l++;
}
while(l<r&&nums[r]==nums[r-1]){
r--;
}
l++;
r--;
}
}
}
return res;
}
}