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

Python解LeetCode单词搜索题时报无法给矩阵单元格赋值字符串错误

问题根因分析

你遇到的报错完全是传参错误导致的,和数组拷贝是否深浅没有直接关系,看你代码里向右搜索的递归调用行:

if j + 1 < len(board[0]) and board[i][j + 1] == word[0]:
    return is_word(board.copy()[i], word[1:], i, j + 1)

这里你错误传入了board.copy()[i]作为is_word的第一个参数:

  • 原board是二维数组,board.copy()[i]是取拷贝后数组的第i行,是一维数组
  • 进入下一层递归后,执行board[i][j] = "."时,board已经是一维结构,board[i]对应的就是单个字符串元素,而字符串是不可变类型,不支持元素赋值,自然抛出你遇到的TypeError: 'str' object does not support item assignment错误。
  • 首次运行正常是因为第一次调用is_word时传入的是完整二维数组,还没走到错误的传参分支。

其他隐性问题

  1. 浅拷贝问题:list.copy()是浅拷贝,对二维数组来说,只拷贝了外层列表容器,内层的每一行还是和原数组共享引用,你修改board[i][j]会影响其他递归分支的判断,要么改用copy.deepcopy()做深拷贝,要么更高效的方案是用回溯逻辑,不需要每次传数组拷贝:
# 回溯核心逻辑参考
tmp = board[i][j]
board[i][j] = "."
# 四个方向递归判断结果
res = 四个方向递归判断...
board[i][j] = tmp # 回溯改回原值,不影响其他分支
return res
  1. 边界判断顺序错误:你现在先修改board[i][j]再判断len(word) == 0,顺序反了,最后一个字符匹配时会直接返回,漏处理最后一步的匹配校验。

修复方案

先把错误的传参改对即可解决当前报错:

if j + 1 < len(board[0]) and board[i][j + 1] == word[0]:
    return is_word(board.copy(), word[1:], i, j + 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:09:02