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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:54:01