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
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容