Regions Cut By Slashes
MediumArrayHash TableDepth-First SearchBreadth-First SearchUnion FindMatrix
Solution
export function regionsBySlashes(grid: string[]): number {
const n = grid.length;
const board: number[][] = Array.from({ length: 3 * n }, () => new Array(3 * n).fill(0));
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
if (grid[i][j] === '/' || grid[i][j] === '\\') {
cutBySlash(board, grid[i][j], i * 3, j * 3);
}
}
}
let answer = 0;
for (let y = 0; y < n * 3; y++) {
for (let x = 0; x < n * 3; x++) {
if (findRegion(board, y, x)) {
answer += 1;
}
}
}
return answer;
}
function cutBySlash(board: number[][], slash: string, y: number, x: number) {
let [cy, cx] = slash === '/' ? [y, x + 2] : [y, x];
const [dy, dx] = slash === '/' ? [1, -1] : [1, 1];
for (let i = 0; i < 3; i++) {
board[cy][cx] = 1;
[cy, cx] = [cy + dy, cx + dx];
}
}
function findRegion(board: number[][], y: number, x: number) {
if (Math.min(y, x) < 0 || Math.max(y, x) >= board.length || board[y][x] === 1) {
return false;
}
board[y][x] = 1;
const directions = [
[-1, 0],
[1, 0],
[0, -1],
[0, 1],
];
for (const [dy, dx] of directions) {
findRegion(board, y + dy, x + dx);
}
return true;
}
Complexity
- Time:
O(N^2)
- Space:
O(N^2)