给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
注意:
答案中不可以包含重复的四元组。
示例:
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]思路:
在LeetCode-Python-15. 三数之和的基础上再加一层循环。
class Solution(object): def fourSum(self, n, target): """ :type nums: List[int] :type target: int :rtype: List[List[int]] """ self.res = [] n.sort() # print n def threeSum(nums,t, d): """ :type nums: List[int] :rtype: List[List[int]] """ #固定a,用双指针在排序数组里找两数之和为-a l = len(nums) res = [] for i, a in enumerate(nums): if i == 0 or nums[i] > nums[i - 1]: #开始双指针 left, right = i + 1, len(nums) - 1 while(left < right): s = a + nums[left] + nums[right] # print d, a, nums[left], nums[right] if s == t: tmp = [d,a, nums[left], nums[right]] self.res.append(tmp) left += 1 right -= 1 while left < right and nums[left] == nums[left - 1]: left += 1 while right > left and nums[right] == nums[right + 1]: right -= 1 elif s < t: left += 1 elif s > t: right -= 1 for i in range(len(n) - 3): if i == 0 or n[i] > n[i - 1]: # print n[i] threeSum(n[i + 1:], target - n[i], n[i]) return self.res
