Coloring A Border LeetCode solution in JavaScript

1
var colorBorder = function (grid, row, col, color) {
2
const m = grid.length;
3
const n = grid[0].length;
4
const dirs = [-1, 0, 1, 0, -1];
5

6
const res = [];
7

8
for (let i = 0; i < m; i++) {
9
res[i] = new Array(n).fill(-1);
10
}
11

12
const val = grid[row][col];
13

14
const stack = [];
15
const visited = new Set();
16

17
visited.add(`${row}#${col}`);
18
stack.push([row, col]);
19

20
while (stack.length > 0) {
21
const [currRow, currCol] = stack.pop();
22

23
let isConnected = true;
24

25
for (let i = 0; i < dirs.length - 1; i++) {
26
const neiRow = currRow + dirs[i];
27
const neiCol = currCol + dirs[i + 1];
28

29
if (withinBound(neiRow, neiCol)) {
30
if (!visited.has(`${neiRow}#${neiCol}`)) {
31
if (grid[neiRow][neiCol] === val) {
32
visited.add(`${neiRow}#${neiCol}`);
33
stack.push([neiRow, neiCol]);
34
} else {
35
isConnected = false;
36
}
37
}
38
}
39
}
40

41
if (isBorder(currRow, currCol) || !isConnected)
42
res[currRow][currCol] = color;
43
}
44

45
for (let i = 0; i < m; i++) {
46
for (let j = 0; j < n; j++) {
47
if (res[i][j] === -1) {
48
res[i][j] = grid[i][j];
49
}
50
}
51
}
52

53
return res;
54

55
function withinBound(row, col) {
56
return row >= 0 && col >= 0 && row < m && col < n;
57
}
58

59
function isBorder(row, col) {
60
return row === 0 || col === 0 || row === m - 1 || col === n - 1;
61
}
62
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0