You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode三数之和:返回Set却满足List[List[int]]要求的原因?

关于LeetCode中返回Set却通过评测的疑问解答

首先得明确:严格来说,这段代码的返回类型不符合题目要求——题目要求返回List[List[int]],但你返回的是set[tuple[int, int, int]]。不过它能通过评测,核心原因在于LeetCode的评测逻辑:

  • LeetCode的Python评测系统不会严格校验返回值的类型注解匹配度,它更关注的是返回内容的「结构和值是否符合预期」。
  • 当你返回一个可迭代对象(比如set)时,评测器会自动遍历它;而里面的tuple和list在内容层面是等价的,评测器只会对比元素的数值,不会区分是tuple还是list。只要三元组的数值正确,不管是存在tuple还是list里,不管是用set还是list包裹,都会被判定为正确。

不过这里要提醒你:

  • 这是LeetCode评测的「宽松处理」,并不是Python本身的类型规则允许这么做。如果在本地用严格的类型检查工具(比如mypy),这段代码会直接报错,提示返回类型不匹配。
  • 这种写法不够规范,在团队协作或者需要严格类型约束的场景下会出问题。

修正后的规范写法

把set转换成list,同时将内部的tuple转为list,完全符合题目要求的返回类型:

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        res, dups = set(), set()
        seen = {}
        for i, val1 in enumerate(nums):
            if val1 not in dups:
                dups.add(val1)
                for j, val2 in enumerate(nums[i+1:]):
                    complement = -val1 - val2
                    if complement in seen and seen[complement] == i:
                        res.add(tuple(sorted((val1, val2, complement))))
                    seen[val2] = i
        # 转换为符合要求的List[List[int]]
        return [list(triplet) for triplet in res]

内容的提问来源于stack exchange,提问作者Kang_the_Conqueror

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:55:16