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
相关产品推荐
相关产品推荐

