题目名称

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

示例

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

题解

我们可以创建一个和传入数组完全相同的二维数组,将二维数组内部数字重置为 1
然后遍历传入的二维数组 matrix,
如果遇见 0 则将新创建的二维数组中对应行和列的值全都置为0
如果不为0,则判断新创建的二维数组中对应值是否为 0,如果不为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
27
28
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var setZeroes = function(matrix) {
let m = matrix.length, n = matrix[0].length
let arr = new Array(m).fill(1).map(item => new Array(n).fill(1));
for(let i = 0; i < m; i++) {
for(let j = 0; j < n; j++) {
let item = matrix[i][j]
if(item === 0) {
arr[i] = new Array(n).fill(0)
for(let k = 0; k < m; k++) {
arr[k][j] = 0
}
} else {
if(arr[i][j]) {
arr[i][j] = item
}
}
}
}
for(let i = 0; i < m; i++) {
for(let j = 0; j < n; j++) {
matrix[i][j] = arr[i][j]
}
}
}