要求
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):
- 0 <= a, b, c, d < n
- a、b、c 和 d 互不相同
- nums[a] + nums[b] + nums[c] + nums[d] == target 你可以按 任意顺序 返回答案 。
示例 1:
输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
示例 2:
输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]
核心代码
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
self.res = []
nums.sort()
def threeSum(nums,t,d):
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]
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(nums) - 3):
if i == 0 or nums[i] > nums[i - 1]:
threeSum(nums[i + 1:],target - nums[i],nums[i])
return self.res
解题思路:我们借用上次的三数之和的思路,我们循环遍历也就是(目标值-当前值),是其余三个数的和,这样调用三数之和的代码,可解四数之和的问题,重点还在三数之和上。