LeetCode矩阵置零问题:代码无法替换所有None的原因排查
问题原因分析及修复方案
核心错误:列遍历范围写错
你代码最后替换None为0的循环里,j的遍历范围用错了:
for j in range(len(matrix)):
len(matrix)是矩阵的行数,而矩阵的列数应该取len(matrix[0])。当矩阵不是方阵(行数≠列数)时,这个循环要么会漏掉部分列的None(行数<列数时),要么触发索引越界(行数>列数时),直接导致部分None没被替换成0。
把这一行改成下面的代码就能解决问题:
for j in range(len(matrix[0])):
额外优化建议
你的标记逻辑存在重复操作:每次遇到原矩阵里的0,都会重复处理整行整列。比如同一行有两个0,会对同一行执行两次标记,虽然不影响结果,但会降低效率。可以先收集所有原0的位置再统一标记,或者用矩阵的首行首列当标记位(LeetCode官方推荐的原地解法思路),减少重复操作。
修复后的完整代码:
class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ for i in range(len(matrix)): for j in range(len(matrix[0])): if matrix[i][j] == 0: for t in range(len(matrix[0])): if matrix[i][t] != 0: matrix[i][t] = None for k in range(len(matrix)): if matrix[k][j] != 0: matrix[k][j] = None for i in range(len(matrix)): # 修正j的遍历范围为列数 for j in range(len(matrix[0])): if matrix[i][j] is None: matrix[i][j] = 0
另外,Python里判断None更推荐用is None而非== None,这是语言最佳实践。
内容的提问来源于stack exchange,提问作者mkj4332
相关产品推荐
相关产品推荐

