2021/03/21 每日一题 矩阵置零

LeetCode上矩阵置零,中等难度,记录下解题思路

给一个二维数组,在数组中出现0的位置的行列都要设置为0,之后返回设置后的数组

思路是

  1. 第一遍循环数组,记录下0元素的行列,分别保存在两个数组中
  2. 第二遍遍历,将两个数组对应行列的元素全部转换为0

有一点小优化是,JavaScript提供set数据结构,能够自动去重,这样能够保证保存的行列数据不重复,减少计算量

var setZeroes = function(matrix) {
  // 保存二维数组长度
  let m = matrix.length
  let n = matrix[0].length
  if (!m || !n) return matrix
  // 设置两个set用于保存行列
  let col = new Set()
  let row = new Set()
  // 第一次循环
  for(let i = 0; i < m; i++){
    for(let j = 0; j < n; j++){
      // 如果当前元素为0,保存行列
      if (matrix[i][j] === 0){
        row.add(i)
        col.add(j)
      }
    }
  }
  // 第二次循环,循环整个数组
  for(let i = 0; i < m; i++){
    for(let j = 0; j < n; j++){
      // 如果这行或者这列出现在set中,那么就要设为0
      if (row.has(i) || col.has(j)) {
        matrix[i][j] = 0
      }
    }
  }
  return matrix
};

你可能感兴趣的:(2021/03/21 每日一题 矩阵置零)