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