首页
矩阵置零

leetcode:矩阵置零

描述:

题解:

思路一:使用标记数组

我们可以用两个数组分别记录每一行和每一列是否有零出现。具体实现就是遍历这个矩阵,发现元素为0就将它所在的行和列设置为true,代表有0出现。

拿示例2来举例子,就是如下的样子:

//开始时
arrRow = [false, false, false] //行数组
arrCol = [false, false, false, false] //列数组

//遍历整个矩阵后,将元素为0的所在行和列都设置为true
arrRow = [true, false, false]
arrCol = [true, false, false, true]

然后再次遍历该矩阵,如果元素所在的行为0或列为0,就将它置零,代码如下:

if (arrRow[row] || arrCol[col]) {
    matrix[row][col] = 0
}

ES6

export function setZeroes(matrix) {
  const m = matrix.length, n = matrix[0].length
  // 使用两个标记数组分别存放row和col是否有零出现
  const arrRow = new Array(m).fill(false)
  const arrCol = new Array(n).fill(false)
  for (let row = 0; row < m; row++) {
    for (let col = 0; col < n; col++) {
      if (matrix[row][col] == 0) {
        arrRow[row] = arrCol[col] = true
      }
    }
  }

  // 再次遍历数组,用标记数组来更新原数组即可
  for (let row = 0; row < m; row++) {
    for (let col = 0; col < n; col++) {
      if (arrRow[row] || arrCol[col]) {
        matrix[row][col] = 0
      }
    }
  }
}

时间复杂度:O(mn),空间复杂度:O(m+n)