ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

LeetCode Python -18.四数之和

2026/9/23 7:58:57 拓冰建站 浏览量
LeetCode Python -18.四数之和

目录

  • 题目
  • 答案
  • 运行结果


题目

给你一个由 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]]

提示:

  • 1 <= nums.length <= 200
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109

答案

class Solution(object):def fourSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[List[int]]"""res, res_set = [], set()nums.sort()for i in range(len(nums) - 1):if i > 0 and nums[i] == nums[i - 1]: continuefor j in range(i + 1, len(nums)):l, r = j + 1, len(nums) - 1while l < r:sm = nums[i] + nums[j] + nums[l] + nums[r] if sm < target: l += 1elif sm > target: r -= 1elif (nums[i], nums[j], nums[l], nums[r]) not in res_set:res.append([nums[i], nums[j], nums[l], nums[r]]); res_set.add((nums[i], nums[j], nums[l], nums[r])) else: l, r = l + 1, r - 1return res

运行结果

在这里插入图片描述
在这里插入图片描述