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