Skip to content

Commit e9ef8ad

Browse files
authored
Update 803-bricks-falling-when-hit.js
1 parent 339d538 commit e9ef8ad

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

803-bricks-falling-when-hit.js

+55
Original file line numberDiff line numberDiff line change
@@ -196,3 +196,58 @@ function isConnected(i, j, grid, dirs) {
196196
}
197197
return false
198198
}
199+
200+
// another
201+
202+
/**
203+
* @param {number[][]} grid
204+
* @param {number[][]} hits
205+
* @return {number[]}
206+
*/
207+
const hitBricks = function (grid, hits) {
208+
const m = grid.length,
209+
n = grid[0].length,
210+
res = Array(hits.length).fill(0),
211+
dirs = [
212+
[-1, 0],
213+
[1, 0],
214+
[0, 1],
215+
[0, -1],
216+
];
217+
for (let [r, c] of hits) grid[r][c] -= 1;
218+
219+
for (let i = 0; i < n; i++) dfs(grid, 0, i, m, n, dirs);
220+
221+
for (let i = hits.length - 1; i >= 0; i--) {
222+
const [r, c] = hits[i];
223+
grid[r][c] += 1;
224+
if (grid[r][c] === 1 && connected(grid, r, c, m, n, dirs)) {
225+
res[i] = dfs(grid, r, c, m, n, dirs) - 1;
226+
}
227+
}
228+
229+
return res;
230+
};
231+
232+
function dfs(grid, i, j, m, n, dirs) {
233+
if (i < 0 || i >= m || j < 0 || j >= n || grid[i][j] !== 1) return 0;
234+
grid[i][j] = 2;
235+
let res = 1;
236+
for (let [dr, dc] of dirs) {
237+
res += dfs(grid, i + dr, j + dc, m, n, dirs);
238+
}
239+
return res;
240+
}
241+
242+
function connected(grid, i, j, m, n, dirs) {
243+
if (i === 0) return true;
244+
for (let [dr, dc] of dirs) {
245+
const nr = i + dr,
246+
nc = j + dc;
247+
if (nr >= 0 && nr < m && nc >= 0 && nc < n && grid[nr][nc] === 2)
248+
return true;
249+
}
250+
251+
return false;
252+
}
253+

0 commit comments

Comments
 (0)