给你一个由
n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组[nums[a], nums[b], nums[c], nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):
0 <= a, b, c, d < na、b、c和d互不相同nums[a] + nums[b] + nums[c] + nums[d] == target
- def fourSum(nums, target):
- nums.sort() # 首先对数组进行排序
- result = [] # 用于存储结果的列表
-
- for i in range(len(nums) - 3):
- if i > 0 and nums[i] == nums[i - 1]:
- # 避免重复的四元组
- continue
-
- for j in range(i + 1, len(nums) - 2):
- if j > i + 1 and nums[j] == nums[j - 1]:
- # 避免重复的四元组
- continue
-
- left, right = j + 1, len(nums) - 1
-
- while left < right:
- total = nums[i] + nums[j] + nums[left] + nums[right]
-
- if total < target:
- left += 1
- elif total > target:
- right -= 1
- else:
- # 找到一个和为target的四元组
- result.append([nums[i], nums[j], nums[left], nums[right]])
-
- # 跳过重复的元素
- while left < right and nums[left] == nums[left + 1]:
- left += 1
- while left < right and nums[right] == nums[right - 1]:
- right -= 1
-
- # 移动到下一个不同的元素
- left += 1
- right -= 1
-
- return result
-
-
- # 示例
- nums = [1, 0, -1, 0, -2, 2]
- target = 0
- print(fourSum(nums, target))
[[-2, -1, 1, 2], [-2, 0, 0, 2], [-1, 0, 0, 1]]