# 18-4sum Try it on leetcode ## Description

Given an array nums of n integers, return an array of all the unique quadruplets [nums[a], nums[b], nums[c], nums[d]] such that:

You may return the answer in any order.

 

Example 1:

Input: nums = [1,0,-1,0,-2,2], target = 0
Output: [[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

Example 2:

Input: nums = [2,2,2,2,2], target = 8
Output: [[2,2,2,2]]

 

Constraints:

## Solution(Python) ```Python class Solution: def fourSum(self, nums: List[int], target: int) -> List[List[int]]: def kSum(nums: List[int], target: int, k: int) -> List[List[int]]: res = [] # If we have run out of numbers to add, return res. if not nums: return res # There are k remaining values to add to the sum. The # average of these values is at least target // k. average_value = target // k # We cannot obtain a sum of target if the smallest value # in nums is greater than target // k or if the largest # value in nums is smaller than target // k. if average_value < nums[0] or nums[-1] < average_value: return res if k == 2: return twoSum(nums, target) for i in range(len(nums)): if i == 0 or nums[i - 1] != nums[i]: for subset in kSum(nums[i + 1:], target - nums[i], k - 1): res.append([nums[i]] + subset) return res def twoSum(nums: List[int], target: int) -> List[List[int]]: res = [] s = set() for i in range(len(nums)): if len(res) == 0 or res[-1][1] != nums[i]: if target - nums[i] in s: res.append([target - nums[i], nums[i]]) s.add(nums[i]) return res nums.sort() return kSum(nums, target, 4) ```