Saltar a contenido

18. 4Sum

18
4Sum Medium
Tags: Array, Sorting, Two Pointers

Solución (Python)

class Solution(object):
    def fourSum(self, nums, target):
        nums.sort()
        result, quad = [], []

        def ksum(k, start, target):
            if k != 2:
                for i in range(start, len(nums) - k + 1):
                    if i > start and nums[i] == nums[i - 1]:
                        continue
                    quad.append(nums[i])
                    ksum(k - 1, i + 1, target - nums[i])
                    quad.pop()
                return

            l,r = start, len(nums) - 1

            while l < r:
                if nums[l] + nums[r] < target:
                    l += 1
                elif nums[l] + nums[r] > target:
                    r -= 1
                else:
                    result.append(quad + [nums[l], nums[r]])
                    l += 1
                    while l < r and nums[l] == nums[l - 1]:
                        l += 1
        ksum(4, 0, target)
        return result

sol = Solution()
print(sol.fourSum([1,0,-1,0,-2,2], target=0))
print(sol.fourSum([2,2,2,2,2], target=8))