Menu
CoddyTech

3Sum

给你一个整数列表 nums。找出所有由 nums 中三个不同位置的值组成的三元组 [a, b, c],使得 a + b + c = 0。将每个三元组按非递减顺序排列(a ≤ b ≤ c),并且每个不同的三元组只列出一次,即使有多种位置组合能组成它。返回的三元组按第一个值排序,相同情况下再按第二个值排序。

函数

threeSum(nums: integer-array) → integer-2d-array
numsinteger-array
至少包含 3 个元素的整数列表
返回值integer-2d-array
每个和为 0 的不同三元组,每个三元组都按非递减顺序排列,列表已排序

约束条件

  • 3 ≤ nums.length ≤ 3000
  • -105 ≤ nums[i] ≤ 105
  • 至少有一个三元组的和为 0。
  • 当两个三元组包含相同的三个值时,它们相同。

示例

输入
nums = [-2, 0, 1, 1, -1, 2]
输出
[[-2, 0, 2], [-2, 1, 1], [-1, 0, 1]]
解释
三个三元组的和为 0。[-2, 1, 1] 中的值 1 使用了两次,因为 1 出现在两个位置;[-1, 0, 1] 可以使用任意一个 1,但只出现一次。
challenge icon

进阶

同样的模式也能解决 4Sum:固定两个值,再对其余元素使用双指针。你能用 O(n³) 实现它,并在每一层都正确处理重复项吗?

重置代码
def threeSum(nums):
    # 在这里编写代码

测试 #1

测试 #2

参数

nums = [-2, 0, 1, 1, -1, 2]

预期输出

[[-2, 0, 2], [-2, 1, 1], [-1, 0, 1]]