essay

hot100-矩阵置零

#算法

hot100——矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

示例 1:
image.png

  • 输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
  • 输出:[[1,0,1],[0,0,0],[1,0,1]]

示例 2:
image.png

  • 输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
  • 输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]

提示:

  • m == matrix.length

  • n == matrix[0].length

  • 1 <= m, n <= 200

  • -2312^{31} <= matrix[i][j] <= 2312^{31} - 1

使用了O(m+n)的额外空间,并非最优解

解法

func setZeroes(matrix [][]int) {
    m, n := len(matrix), len(matrix[0])  // 获取矩阵的行数 m 和列数 n
    rowZero := make([]bool, m)  // rowZero[i] 表示第 i 行是否应该被置为 0
    colZero := make([]bool, n) // colZero[j] 表示第 j 列是否应该被置为 0
    
    // 第一遍遍历:标记所有需要清零的行和列
    for i := 0; i < m; i++ {
        for j := 0; j < n; j++ {
            if matrix[i][j] == 0 { // 当前位置为 0,那么第 i 行和第 j 列最终都要变为 0
                rowZero[i] = true
                colZero[j] = true
            }
        }
    }
    
    // 第二遍遍历:根据之前标记的行和列,将对应位置置为 0
    for i := 0; i < m; i++ {
        for j := 0; j < n; j++ { // 如果当前行被标记需要清零,或者当前列被标记需要清零
            if rowZero[i] || colZero[j] {
                matrix[i][j] = 0
            }
        }
    }
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接