力扣 15. 三数之和

39 阅读1分钟

1. 题目

leetcode.cn/problems/3s…

image.png

2. 解析

image.png

3. 核心代码

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        n = len(nums)
        if n < 3 or nums is None:
            return []
        nums.sort()
        res = []
        for i in range(n):
            # 最小的那个值大于0,则全部返回
            if nums[i] > 0:
                return res
            # 去掉重复结果
            if i > 0 and nums[i] == nums[i - 1]:
                continue
            l = i + 1
            r = n - 1
            while l < r:
                if nums[i] + nums[l] + nums[r] == 0:
                    res.append([nums[i], nums[l], nums[r]])
                    while l < r and nums[l] == nums[l + 1]:
                        l += 1
                    while l < r and nums[r] == nums[r - 1]:
                        r -= 1
                    l += 1
                    r -= 1
                elif nums[i] + nums[l] + nums[r] > 0:
                    r -= 1
                else:
                    l += 1
        return res