https://leetcode.com/problems/4sum/
Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target. Note: The solution set must not contain duplicate quadruplets. Example: Given array nums = [1, 0, -1, 0, -2, 2], and target = 0. A solution set is: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]
class Solution { public: bool isMatch(string s, string p) { } };
class Solution(object): def fourSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[List[int]] """ nums = sorted(nums) solution = self.sum4(nums, target) # need to remove duplicate size = len(solution) for s in range(size-1, 0, -1): if solution[s] in solution[:s]: solution.pop(s) return solution def sum4(self, nums, target): if len(nums) < 4: return [] s1 = self.sum3(nums[:-1], target - nums[-1]) s2 = self.sum4(nums[:-1], target) for x in s1: x.append(nums[-1]) return s1 + s2 def sum3(self, nums, target): if len(nums) < 3: return [] s1 = self.sum2(nums[:-1], target - nums[-1]) s2 = self.sum3(nums[:-1], target) for x in s1: x.append(nums[-1]) return s1 + s2 def sum2(self, nums, target): # nums already sorted solution = [] if len(nums) < 2: return solution i = 0; j = len(nums) -1 while i < j: if nums[i] + nums[j] == target: solution.append([nums[i],nums[j]]) i += 1 else: if nums[i] + nums[j] > target: j -= 1 else: i += 1 return solution