15. 三數之和 - 力扣(LeetCode)
class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort() # 排序n = len(nums)res = []for i in range(n):# 剪枝:如果當前數 > 0,三數之和不可能為 0if nums[i] > 0:break# 去重:跳過重復元素if i > 0 and nums[i] == nums[i - 1]:continue# 雙指針left, right = i + 1, n - 1while left < right:total = nums[i] + nums[left] + nums[right]if total == 0:res.append([nums[i], nums[left], nums[right]])# 去重:跳過相同的 left 和 rightwhile left < right and nums[left] == nums[left + 1]:left += 1while left < right and nums[right] == nums[right - 1]:right -= 1left += 1right -= 1elif total < 0:left += 1 # 和偏小,左指針右移else:right -= 1 # 和偏大,右指針左移return res