classSolution: defthreeSum(self, nums: List[int]) -> List[List[int]]: # 三指针 nums.sort() # 时间杂度为O(NlogN) lens = len(nums) if lens < 3or (nums[0] + nums[-1] > nums[-1] or nums[0] + nums[-1] < nums[0]): # 不可能有三元组满足a+b+c=0 return [] result = [] for i inrange(0,lens-2): if i > 0and nums[i] == nums[i-1]: # 预防第一个数出现重复 continue left, right = i+1, lens-1 while left < right: if nums[i] + nums[left] + nums[right] == 0: # 因为两个数字已经能够决定第三个数字了,因此如果第一个数字固定,第二个也相同的话,则说明出现重复,因此在固定第一个数字后,要确保第二个数字不能重复,因此再排序好后需要跳过相同的相邻第二个数字 result.append([nums[i], nums[left] ,nums[right]]) # 动态修改双指针,对第二个数和第三个数进行预防重复,只需要跳过重复的数字 while left < right and nums[left] == nums[left+1]: left += 1 while left < right and nums[right] == nums[right-1]: right -= 1 # 双指针向往下遍历 left += 1 right -= 1 elif nums[i] + nums[left] + nums[right] > 0: right -= 1 else: left += 1 return result