Striver SDE Sheet矩阵置零问题:markrow未定义的NameError求助
矩阵置零问题的NameError修复方案
问题描述
给定一个m×n的整数矩阵matrix,若某元素为0,则将其所在的整行和整列置为0。
错误信息
NameError: name 'markrow' is not defined
markrow(i)
尝试的错误代码
class Solution: def markrow(i): for j in range(m): if matrix[i][j]!=0: matrix[i][j]=-1 def markcol(j): for i in range(n): if matrix[i][j]!=0: matrix[i][j]=-1 def setZeroes(self, matrix: List[List[int]]) -> None: n=len(matrix) m=len(matrix[0]) for i in range(n): for j in range(m): if matrix[i][j]==0: markrow(i) markcol(j) for i in range(n): for j in range(m): if matrix[i][j]==-1: matrix[i][j]==0 print(m)
问题分析与修正代码
错误根源:
- 类内部定义的
markrow、markcol未添加self参数,也未通过self.调用,导致无法识别 - 这两个函数无法直接访问
setZeroes方法内的m、n、matrix变量,需通过参数传递 - 最后一步将
-1置0时误用了比较运算符==,应为赋值运算符=
修正后的代码:
from typing import List class Solution: def markrow(self, matrix, row, col_count): for j in range(col_count): if matrix[row][j] != 0: matrix[row][j] = -1 def markcol(self, matrix, col, row_count): for i in range(row_count): if matrix[i][col] != 0: matrix[i][col] = -1 def setZeroes(self, matrix: List[List[int]]) -> None: n = len(matrix) m = len(matrix[0]) # 遍历标记需要置零的行和列 for i in range(n): for j in range(m): if matrix[i][j] == 0: self.markrow(matrix, i, m) self.markcol(matrix, j, n) # 将标记的-1替换为0 for i in range(n): for j in range(m): if matrix[i][j] == -1: matrix[i][j] = 0
关键修正点
- 给类内函数添加
self参数,调用时使用self.前缀 - 将
matrix、行列数作为参数传入markrow和markcol,解决变量作用域问题 - 修正赋值运算符错误,确保
-1能正确替换为0 - 添加类型标注的导入语句,保证代码兼容性
内容的提问来源于stack exchange,提问作者devesh jeswani
相关产品推荐
相关产品推荐

