两个指针从两端扫描。
需要注意的是result.append((nums[a],nums[i],nums[j])) 这句,添加元组可以用list(set(result))去重,添加列表不可以。
下面这种去重方式也有问题会 超时
if [nums[a],nums[i],nums[j]] not in result:
result.append(....)
代码:
class Solution(object):
def threeSum(self, nums):"""
:type nums: List[int]
:rtype: List[List[int]]
"""
result = []
out = []
if len(nums)==0:
return []
nums.sort()
for a in range(len(nums)-2):
i= a+1
j=len(nums)-1
if nums[a]>0:
continue
if a>0 and nums[a]==nums[a-1]:
continue
while(i<j):
temp = nums[a]+nums[i]+nums[j]
if temp >0:
j-=1
while(nums[j] ==nums[j+1] and i<j):
j-=1
elif temp<0:
i+=1
while(nums[i]==nums[i-1] and i<j):
i+=1
else:
result.append((nums[a],nums[i],nums[j]))
i+=1
j-=1
while(nums[i]==nums[i-1] and nums[j]==nums[j+1] and i<j):
i+=1
j-=1
return list(set(result))