给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。
解题思路和三数之和类似
唯一区别需要嵌套遍历数组,前两个数a,b分别遍历循环,在循环内用双指针指向另外两个数c,d.通过移动指针寻找四数之和等于target的数组
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
nums.sort()
n = len(nums)
result = []
if (not nums or n < 4):
return result
for i in range(n-3):
if i > 0 and nums[i] == nums[i - 1]:
continue
for b in range(i+1,n-2):
c = b + 1
d = n - 1
if b > i + 1 and nums[b] == nums[b-1]:
continue
while c < d:
if nums[i] + nums[b] + nums[c] + nums[d] == target:
result.append([nums[i],nums[b],nums[c],nums[d]])
while c < d and nums[c] == nums[c+1]:
c += 1
while c < d and nums[d] == nums[d-1]:
d -= 1
c += 1
d -= 1
elif nums[i] + nums[b] + nums[c] + nums[d] < target:
c += 1
else:
d -= 1
return result