给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法

矩阵置零

题目描述

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 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] ]

思路

1、原地置换,表示空间复杂度要求为 O(1)
2、第一次遍历,记录二维数组中值为 0 的下标,分别记录行号和列号
3、第二次遍历,赋值,如果当前遍历位置的下标只要有一个在之前记录的下标中,就置为 0

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var setZeroes = function(matrix) {
const length = matrix.length
const high = matrix[0].length
let rowFlag = [],
columnFlag = []
for (let i = 0; i < length; i++) {
for (let j = 0; j < high; j++) {
if (matrix[i][j] === 0) {
rowFlag.push(i)
columnFlag.push(j)
}
}
}
for (let i = 0; i < length; i++) {
for (let j = 0; j < high; j++) {
if (rowFlag.indexOf(i) > -1 || columnFlag.indexOf(j) > -1) {
matrix[i][j] = 0
}
}
}
return matrix
}