1. 首先对nums进行排序
  2. 设置left,right两个指针,三数之和大于0,right左移;小于0,left右移;等于0,加入结果集,此处要注意不能直接break,进行下一个i的判断,而是还要将left右移以及right左移,因为还有接下来还可能存在等于0的情况。
  3. 最后进行去重,注意list类型不能作为set的元素。
class Solution(object):
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        if not nums or len(nums) < 3:
            return []
        #双指针法
        #首先从小到大
        nums.sort()
        res = []
        for i in range(len(nums)-2):
            left = i+1
            right = len(nums)-1
            while right > left:
                sum_3 = nums[i] + nums[left] + nums[right]
                if sum_3 < 0:
                    left += 1
                elif sum_3 > 0:
                    right -= 1
                else:
                    temp = [nums[i],nums[left],nums[right]]
                    res.append(temp)
                    left += 1
                    right -= 1
        #检查重复
        res_set = []
        for x in res:
            if x not in res_set:
                res_set.append(x)
        return res_set

参考:https://programmercarl.com/0015.%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C.html#双指针