Skip to content

Commit 9050b6b

Browse files
committed
finish 73
1 parent 54ffb54 commit 9050b6b

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

73. Set Matrix Zeroes.js

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/**
2+
* 73. Set Matrix Zeroes
3+
*
4+
* Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place.
5+
*
6+
* Example 1:
7+
*
8+
* Input:
9+
* [
10+
* [1,1,1],
11+
* [1,0,1],
12+
* [1,1,1]
13+
* ]
14+
* Output:
15+
* [
16+
* [1,0,1],
17+
* [0,0,0],
18+
* [1,0,1]
19+
* ]
20+
* Example 2:
21+
*
22+
* Input:
23+
* [
24+
* [0,1,2,0],
25+
* [3,4,5,2],
26+
* [1,3,1,5]
27+
* ]
28+
* Output:
29+
* [
30+
* [0,0,0,0],
31+
* [0,4,5,0],
32+
* [0,3,1,0]
33+
* ]
34+
* Follow up:
35+
*
36+
* A straight forward solution using O(mn) space is probably a bad idea.
37+
* A simple improvement uses O(m + n) space, but still not the best solution.
38+
* Could you devise a constant space solution?
39+
*/
40+
41+
/**
42+
* @param {number[][]} matrix
43+
* @return {void} Do not return anything, modify matrix in-place instead.
44+
*/
45+
var setZeroes = function(matrix) {
46+
var m = matrix.length;
47+
var n = (matrix[0] || []).length;
48+
for (var i = 0; i < m; i++) {
49+
for (var j = 0; j < n; j++) {
50+
if (matrix[i][j] === 0) {
51+
left(i, j, m, n, matrix);
52+
right(i, j, m, n, matrix);
53+
up(i, j, m, n, matrix);
54+
down(i, j, m, n, matrix);
55+
} else if (matrix[i][j] === '#') {
56+
matrix[i][j] = 0;
57+
}
58+
}
59+
}
60+
};
61+
62+
var left = function (i, j, m, n, matrix) {
63+
for (var k = j - 1; k >= 0; k--) {
64+
matrix[i][k] = 0;
65+
}
66+
};
67+
68+
var right = function (i, j, m, n, matrix) {
69+
for (var k = j + 1; k < n; k++) {
70+
matrix[i][k] = matrix[i][k] === 0 ? 0 : '#';
71+
}
72+
};
73+
74+
var up = function (i, j, m, n, matrix) {
75+
for (var k = i - 1; k >= 0; k--) {
76+
matrix[k][j] = 0;
77+
}
78+
};
79+
80+
var down = function (i, j, m, n, matrix) {
81+
for (var k = i + 1; k < m; k++) {
82+
matrix[k][j] = matrix[k][j] === 0 ? 0 : '#';
83+
}
84+
};
85+
86+
// 把没遍历的 1 设置为 0 会影响之后的判断,先设置为 # ,再改回来

0 commit comments

Comments
 (0)