class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
res = []
nums.sort()
i = 0
while i < len(nums):
target = -nums[i]
front, back = i+1, len(nums)-1
while front < back:
tmp_sum = nums[front] + nums[back]
if tmp_sum < target:
front += 1
elif tmp_sum > target:
back -= 1
else: #找到
triple = [nums[i], nums[front], nums[back]] #创建三元组
res.append(triple)
while front < back and nums[front] == triple[1]: #跳过与triple[1]重复的
front += 1
while front < back and nums[back] == triple[2]: #跳过与triple[2]重复的
back -= 1
while i+1 < len(nums) and nums[i+1] == nums[i]: #跳过与triplet[0]重复的
i += 1
i += 1 #while循环
return res