1def three_sum(nums):2 res = []3 nums.sort()4 for i in range(len(nums)):5 if i > 0 and nums[i] == nums[i - 1]:6 continue7 l = i + 18 r = len(nums) - 19 while l < r:10 if nums[i] + nums[l] + nums[r] == 0:11 res.append([nums[i], nums[l], nums[r]])12 l += 113 r -= 114 while l < r and nums[l] == nums[l - 1]:15 l += 116 while r > l and nums[r] == nums[r + 1]:17 r -= 118 elif nums[i] + nums[l] + nums[r] > 0:19 r -= 120 else:21 l += 122 return res