15 三数之和

from typing import Set, Tuple
class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums = sorted(nums)
        res = []
        prev = None
        for i, x in enumerate(nums):
            if x <= 0 and x != prev:
                three_sum = [[x, y, z] for y, z in self.twoSum(nums[i+1:], -x)]
                res += three_sum
            prev = x
        return res

    def twoSum(self, nums: List[int], target: int) -> Set[Tuple[int, int]]:
        two_sum = set()
        two_sum_checker = set()
        for num in nums:
            if target - num in two_sum_checker:
                two_sum.add((target-num, num))
            two_sum_checker.add(num)
        return two_sum

 

posted @ 2021-03-28 18:51  小千北同学超爱写代码  阅读(45)  评论(0编辑  收藏  举报