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,如果存在则把所有结果返回。
这里我利用双指针的方法。
先把数组排序,然后对于每个数nums[i],left和right两个指针分别指向nums[i+1]和nums[l-1]
如果三个数和为0则添加到final中,如果nums[i]>0或者全部遍历结束则返回final。
其他情况下则依次遍历。
注意sums==0时不能直接break,因为会出现不同数字和同样为0的情况,比如[[-1,-1,2],[-1,0,1]],break则会缺失后面的结果。
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
final=[]
nums.sort()
l=len(nums)
for i in range(l):
left, right = i+1, l-1
if nums[i]>0:return final
if i!=0 and nums[i]==nums[i-1]:continue
while left<right:
sums=sum([nums[i],nums[left],nums[right]])
if sums==0:
final.append([nums[i],nums[left],nums[right]])
left+=1
right-=1
while left<right and nums[left]==nums[left-1]:
left+=1
while left<right and nums[right]==nums[right+1]:
right-=1
elif sums<0:
left+=1
else:
right-=1
return final