class Solution:
def threeSum(self , num: List[int]) -> List[List[int]]:
# write code here
n = len(num)
num.sort()
ans = []
# first、second、third三个指针,三个循环,先固定first,second从first+1开始,third从最后开始往前
for first in range(n):
# 遍历到相同的元素跳过
if first > 0 and num[first] == num[first-1]: continue
third = n-1
target = -num[first]
for second in range(first+1, n):
if second > first+1 and num[second] == num[second-1]: continue
# 需要保证 b 的指针在 c 的指针的左侧
while second < third and num[second] + num[third] > target:
third -= 1
if second == third: break
if num[second] + num[third] == target:
ans.append([num[first], num[second], num[third]])
return ans