Skip to content

73. 矩阵置零 ​

  • 题号:73
  • 来源:LeetCode
  • 难度:中等
  • 标签:矩阵 哈希表 数组
  • 语言:TypeScript · Python
  • 解法:2 个
  • 作者:lmliheng
  • 最近更新:2026-09-29

TypeScript ​

TypeScript · O(n*m*(n+m)) 时间 · O(n*m) 空间 · 更新于 2026-09-27

先记录 0 的位置,再置零所在行列

typescript
/**
 * @difficulty medium
 * @tags 矩阵,哈希表
 * @time O(n*m*(n+m))
 * @space O(n*m)
 * @note 先记录 0 的位置,再置零所在行列
 * @73. 矩阵置零
 */

let matrix = [[1, 1, 1], [1, 0, 1], [1, 1, 1]]

let set = new Set()
let row = matrix.length
let col = matrix[0].length

const removeRowCol = (x: number, y: number) => {
    // col
    for (let i = 0; i < row; i++) {
        matrix[i][y] = 0
    }
    //row
    for (let i = 0; i < col; i++) {
        matrix[x][i] = 0
    }
}

for (let i = 0; i < row; i++) {
    for (let j = 0; j < col; j++) {
        if (matrix[i][j] === 0) {
            set.add(`${i},${j}`)
        }
    }
}

for (let i = 0; i < row; i++) {
    for (let j = 0; j < col; j++) {
        if (set.has(`${i},${j}`)) {
            removeRowCol(i, j)
        }
    }
}

console.log(matrix)

源码:ts/leetcode/73. 矩阵置零.ts

Python ​

Python · O(z*(m+n)) 时间 · O(z) 空间 · 更新于 2026-09-29

先记下所有 0 的位置再逐行逐列置零(z 是 0 的个数);标准做法能压到 O(m*n)

python
"""
@lc 73
@title 矩阵置零
@difficulty medium
@tags 矩阵,数组
@time O(z*(m+n))
@space O(z)
@note 先记下所有 0 的位置再逐行逐列置零(z 是 0 的个数);标准做法能压到 O(m*n)
"""

class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        zero=[]
        m=len(matrix)
        n=len(matrix[0])
        for i in range(0,m):
            for j in range(0,n):
                if matrix[i][j]==0:
                    zero.append([i,j])
        print(zero)
        for i in range(len(zero)):
            for r in range(0,m):
                matrix[r][zero[i][1]]=0
            for c in range(0,n):
                matrix[zero[i][0]][c]=0

源码:python/leetcode/hot100/18.py


在 GitHub 上查看题目所在目录:lmliheng/algorithm