from typing import List
defthreeSum(nums: List[int])-> List[List[int]]:
res =[]
nums.sort()for r inrange(len(nums)):if r!=len(nums)-1:if nums[r]==nums[r+1]:continue
l =0while l +1< r:if l!=0:if nums[l]==nums[l-1]:
l +=1continue
another =0- nums[l]- nums[r]if another in nums[l +1: r]:
res.append([nums[l], another, nums[r]])
l +=1return res
if __name__ =='__main__':
nums =[-1,0,1,2,-1,-4,-2,-3,3,0,4]
ans = threeSum(nums)print(ans)
版本2:用了双指针的方法,但是利用函数去重
classSolution:defthreeSum(self, nums: List[int])-> List[List[int]]:
n =len(nums)
nums.sort()
res =[]for a inrange(n -2):
b, c = a +1, n -1while b < c:
temp =nums[a]+ nums[b]+ nums[c]if temp ==0:
candidate=[nums[a], nums[b], nums[c]]if candidate notin res:
res.append(candidate)# res.append([nums[a], nums[b], nums[c]])
b +=1
c -=1elif temp <0:
b +=1else:
c -=1return res
版本3:双指针,进循环判断是否重复
classSolution:defthreeSum(self, nums: List[int])-> List[List[int]]:
n =len(nums)
nums.sort()
res =[]for a inrange(n -2):# 对a进行去重操作if a !=0:if nums[a]== nums[a -1]:continue
b, c = a +1, n -1while b < c:# 对b进行去重操作if b != a +1:if nums[b]== nums[b -1]:
b +=1continue# 对c进行去重操作if c != n -1:if nums[c]== nums[c +1]:
c -=1continue
temp =nums[a]+ nums[b]+ nums[c]if temp ==0:
res.append([nums[a], nums[b], nums[c]])
b +=1
c -=1elif temp <0:
b +=1else:
c -=1return res