LeetCode 面试题 01.08 零矩阵

题目:
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。
示例 1:

输入:
[
  [1, 1, 1],
  [1, 0, 1],
  [1, 1, 1]
]
输出:
[
  [1, 0, 1],
  [0, 0, 0],
  [1, 0, 1]
]

示例 2:

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

解题思路:
要将matrix中元素为0的一行和一列全都变为0,那么我们就要知道0所在的行和列并记录下来。
因此,使用两个map来保存元素为0的行和列,遍历完整个matrix时,两个map集合中的key就是我们分别要清零的行和列(而且不会重复清零,因为map集合中没有重复的key)。
步骤:
直接看代码。

/**
 * @param {number[][]} matrix
 * @return {void} Do not return anything, modify matrix in-place instead.
 */
var setZeroes = function(matrix) {
  // 先定义两个map集合,分别存放行和列
  let row = new Map();
  let col = new Map();
  // 遍历matrix,将元素为0的行和列存入map中
  for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[0].length; j++) {
      if (matrix[i][j] === 0) {
        row.set(i,1)
        col.set(j,1)
      }
    }
  }
  // 遍历行map,将存在的行全都清零
  for (let [key, value] of row) {
    for (let i = 0; i < matrix[0].length; i++) {
      matrix[key][i] = 0;
    }
  }
  // 遍历列map,将存在的列全都清零
  for (let [key, value] of col) {
    for (let i = 0; i < matrix.length; i++) {
      matrix[i][key] = 0;
    }
  }
  //最后返回清零的matrix
  return matrix;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值