题目描述:
思路:使用双指针
代码:
class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
rs=[]
nums.sort()
for i in range(len(nums)):
if nums[i]>0: #排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了
break
if i>=1 and nums[i]==nums[i-1]:
continue
left=i+1
right=len(nums)-1
while left<right:
if nums[i]+nums[left]+nums[right]>0:
right-=1
elif nums[i]+nums[left]+nums[right]<0:
left+=1
else:
rs.append([nums[i],nums[left],nums[right]])
## 去重逻辑应该放在找到一个三元组之后,对b 和 c去重
while right!=left and nums[right]==nums[right-1]:
right-=1
while right!=left and nums[left]==nums[left+1]:
left+=1
left+=1
right-=1
return rs