LeetCode矩阵最大局部值问题调试求助:结果不符预期
解决Largest Local Values in a Matrix代码中的赋值问题
你的代码核心问题出在结果矩阵res的初始化方式上,另外还有一个潜在的边界问题需要优化:
1. 结果矩阵初始化错误
在Python中,[[0] * (n-2)] * (n-2)这种写法会创建一个包含n-2个同一列表引用的列表。也就是说,所有行其实指向同一个子列表,当你修改res[i][j]时,所有行的第j列都会被同步修改。这就是测试用例中两行结果完全相同的原因。
修正方式:用列表推导式生成独立的行,确保每一行都是全新的列表:
res = [[0] * (n-2) for _ in range(n-2)]
2. 最大值初始化的潜在问题
findMax函数中maxVal初始化为0,如果输入矩阵包含负数,这个初始值会导致错误(比如所有元素都是负数时,最大值会被错误保留为0)。建议从当前3x3区域的第一个元素开始初始化,同时函数内使用传入的mat参数而非直接引用全局的grid,保持函数独立性:
def findMax(i:int, j:int, mat: list[list[int]]) -> int: maxVal = mat[i][j] # 从区域第一个元素开始初始化 for r in range(i, i+3): for c in range(j, j+3): maxVal = max(maxVal, mat[r][c]) return maxVal
修正后的完整代码
def largestLocal(grid: list[list[int]]) -> list[list[int]]: n = len(grid[0]) # 修正结果矩阵初始化方式 res = [[0] * (n-2) for _ in range(n-2)] def findMax(i:int, j:int, mat: list[list[int]]) -> int: maxVal = mat[i][j] for r in range(i, i+3): for c in range(j, j+3): maxVal = max(maxVal, mat[r][c]) return maxVal for i in range(0, n-2): for j in range(0, n-2): res[i][j] = findMax(i, j, grid) return res
测试验证
用你的测试用例[[9,9,8,1],[5,6,2,6],[8,2,6,4],[6,2,2,2]]测试,修正后的代码会返回预期结果[[9,9],[8,6]]。
内容的提问来源于stack exchange,提问作者tj07
相关产品推荐
相关产品推荐

