LeetCode 3Sum题出现tuple对象不支持项赋值报错如何排查
错误原因及解法
1. TypeError触发直接原因
你代码中result_dict = () 初始化的是不可变的元组类型,元组不支持键值赋值、新增元素等操作,你需要存储去重后的三元组,应该初始化为空字典:
result_dict = {} # 或 result_dict = dict()
2. 解题逻辑校验
你的整体解题逻辑是成立的:
- 先构建数值到下标的哈希表实现第三个数的O(1)查找
- 双重循环枚举前两个数的索引,保证索引不重复
- 用排序后的三元组作为字典键自动去重,避免返回重复结果
仅存在两处小逻辑缺陷需要修正即可正常运行:
2.1 值存在性判断错误
你使用my_dict.get(y)判断y是否存在,当y对应的下标为0时,返回值0会被Python判定为False,导致正确解被跳过,应该修改为直接判断键是否存在:
if y in my_dict and my_dict[y]!=i and my_dict[y]!=j:
修正后可运行代码
from typing import List class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: result = [] my_dict = dict() result_dict = {} # 修正为字典类型 for i in range(len(nums)): my_dict[nums[i]] = i for j in range(len(nums) - 1): target = nums[j] for i in range(j+1, len(nums)): y = -target - nums[i] key_check = tuple(sorted((nums[j], nums[i], y))) if key_check in result_dict: continue # 修正存在性判断逻辑 if y in my_dict and my_dict[y]!=i and my_dict[y]!=j: t = tuple(sorted((nums[j], nums[i], y))) result_dict[t] = 0 for key in result_dict.keys(): result.append(list(key)) return result
可选优化建议
你当前的解法时间复杂度是O(n²),但在处理大量重复元素时可以先对数组排序,提前跳过相同值的j和i,减少无效循环,同时可以用双指针代替哈希表查找,进一步降低内存消耗。
内容的提问来源于stack exchange,提问作者Resting Platypus
相关产品推荐
相关产品推荐

