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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:09:22