73. Set Matrix Zeroes

25 年 10 月 29 日 星期三
388 字
2 分钟

73. Set Matrix Zeroes

Screenshot 2025-10-29 at 2.24.12 am

O(m+n) 的思路:扫一遍matrix,hash set记录需要置0的行列。第二遍置0。O(m+n) 来自两个hash set

O(1)的思路:用两个变量表示,第一行和第一列需不需要置0。 用第一行和第一列充当前面的hash set

空间复杂度O(m+n)

js
/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */

// O(m+n)
var setZeroes = function (matrix) {
  const row_to_zeros = new Set()
  const col_to_zeros = new Set()
  for (let row = 0; row < matrix.length; row++) {
    for (let col = 0; col < matrix[row].length; col++) {
      if (matrix[row][col] === 0) {
        row_to_zeros.add(row)
        col_to_zeros.add(col)
      }
    }
  }
  console.log(row_to_zeros, col_to_zeros)
  for (let row = 0; row < matrix.length; row++) {
    if (row_to_zeros.has(row)) {
      for (let col = 0; col < matrix[row].length; col++) {
        matrix[row][col] = 0
      }
    }
  }
  for (let col = 0; col < matrix[0].length; col++) {
    if (col_to_zeros.has(col)) {
      for (let row = 0; row < matrix.length; row++) {
        matrix[row][col] = 0
      }
    }
  }
}

空间复杂度O(1)

js
/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var setZeroes = function (matrix) {
  let first_row_to_zeros = false
  let first_col_to_zeros = false
  for (let row = 0; row < matrix.length; row++) {
    for (let col = 0; col < matrix[0].length; col++) {
      if (matrix[row][col] === 0) {
        if (row === 0) {
          first_row_to_zeros = true
        }
        if (col === 0) {
          first_col_to_zeros = true
        }
        matrix[0][col] = 0
        matrix[row][0] = 0
      }
    }
  }

  for (let row = 1; row < matrix.length; row++) {
    // 跳过第一行,留到最后修改
    for (let col = 1; col < matrix[0].length; col++) {
      // 跳过第一列,留到最后修改
      if (matrix[0][col] === 0 || matrix[row][0] === 0) {
        matrix[row][col] = 0
      }
    }
  }
  if (first_col_to_zeros) {
    for (let row = 0; row < matrix.length; row++) {
      matrix[row][0] = 0
    }
  }
  if (first_row_to_zeros) {
    for (let col = 0; col < matrix[0].length; col++) {
      matrix[0][col] = 0
    }
  }
}

文章标题:73. Set Matrix Zeroes

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/73_set_matrix_zeroes[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。