Skip to content

Commit e9d296b

Browse files
authored
feat: add typescript solution to lc problem: No.0130.Surrounded Regions (doocs#479)
1 parent b750875 commit e9d296b

File tree

3 files changed

+165
-0
lines changed

3 files changed

+165
-0
lines changed

solution/0100-0199/0130.Surrounded Regions/README.md

+58
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242

4343
## 解法
4444

45+
dfs/bfs 均可
46+
4547
<!-- 这里可写通用的实现逻辑 -->
4648

4749
<!-- tabs:start -->
@@ -62,6 +64,62 @@
6264

6365
```
6466

67+
### **TypeScript**
68+
69+
```ts
70+
/**
71+
Do not return anything, modify board in-place instead.
72+
*/
73+
function solve(board: string[][]): void {
74+
let m = board.length, n = board[0].length;
75+
if (m < 3 || n < 3) return;
76+
let visited = Array.from({ length: m }, v => new Array(n).fill(false));
77+
// 第一行,最后一行, 第一列, 最后一列
78+
for (let i of [0, m-1]) {
79+
for (let j = 0; j < n; ++j) {
80+
if (board[i][j] == 'X') {
81+
visited[i][j] = true;
82+
} else {
83+
dfs(board, i, j, visited, true);
84+
}
85+
}
86+
}
87+
for (let i = 0; i < m; ++i) {
88+
for (let j of [0, n - 1]) {
89+
if (board[i][j] == 'X') {
90+
visited[i][j] = true;
91+
} else {
92+
dfs(board, i, j, visited, true);
93+
}
94+
}
95+
}
96+
for (let i = 1; i < m - 1; ++i) {
97+
for (let j = 1; j < n - 1; ++j) {
98+
!visited[i][j] && dfs(board, i, j, visited);
99+
}
100+
}
101+
};
102+
103+
function dfs(board: string[][], i: number, j: number, visited: boolean[][], edge = false): void {
104+
let m = board.length, n = board[0].length;
105+
if (i < 0 || i > m - 1 || j < 0 || j > n - 1 || visited[i][j]) {
106+
return;
107+
}
108+
109+
visited[i][j] = true;
110+
if (board[i][j] == 'X') {
111+
return;
112+
}
113+
if (!edge) {
114+
board[i][j] = 'X';
115+
}
116+
for (let [dx, dy] of [[0, 1], [0, -1], [1, 0], [-1, 0]]) {
117+
let x = i + dx, y = j + dy;
118+
dfs(board, x, y, visited, edge);
119+
}
120+
}
121+
```
122+
65123
### **...**
66124

67125
```

solution/0100-0199/0130.Surrounded Regions/README_EN.md

+56
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,62 @@
5151

5252
```
5353

54+
### **TypeScript**
55+
56+
```ts
57+
/**
58+
Do not return anything, modify board in-place instead.
59+
*/
60+
function solve(board: string[][]): void {
61+
let m = board.length, n = board[0].length;
62+
if (m < 3 || n < 3) return;
63+
let visited = Array.from({ length: m }, v => new Array(n).fill(false));
64+
// 第一行,最后一行, 第一列, 最后一列
65+
for (let i of [0, m-1]) {
66+
for (let j = 0; j < n; ++j) {
67+
if (board[i][j] == 'X') {
68+
visited[i][j] = true;
69+
} else {
70+
dfs(board, i, j, visited, true);
71+
}
72+
}
73+
}
74+
for (let i = 0; i < m; ++i) {
75+
for (let j of [0, n - 1]) {
76+
if (board[i][j] == 'X') {
77+
visited[i][j] = true;
78+
} else {
79+
dfs(board, i, j, visited, true);
80+
}
81+
}
82+
}
83+
for (let i = 1; i < m - 1; ++i) {
84+
for (let j = 1; j < n - 1; ++j) {
85+
!visited[i][j] && dfs(board, i, j, visited);
86+
}
87+
}
88+
};
89+
90+
function dfs(board: string[][], i: number, j: number, visited: boolean[][], edge = false): void {
91+
let m = board.length, n = board[0].length;
92+
if (i < 0 || i > m - 1 || j < 0 || j > n - 1 || visited[i][j]) {
93+
return;
94+
}
95+
96+
visited[i][j] = true;
97+
if (board[i][j] == 'X') {
98+
return;
99+
}
100+
if (!edge) {
101+
board[i][j] = 'X';
102+
}
103+
for (let [dx, dy] of [[0, 1], [0, -1], [1, 0], [-1, 0]]) {
104+
let x = i + dx, y = j + dy;
105+
dfs(board, x, y, visited, edge);
106+
}
107+
}
108+
```
109+
54110
### **...**
55111

56112
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
Do not return anything, modify board in-place instead.
3+
*/
4+
function solve(board: string[][]): void {
5+
let m = board.length, n = board[0].length;
6+
if (m < 3 || n < 3) return;
7+
let visited = Array.from({ length: m }, v => new Array(n).fill(false));
8+
// 第一行,最后一行, 第一列, 最后一列
9+
for (let i of [0, m-1]) {
10+
for (let j = 0; j < n; ++j) {
11+
if (board[i][j] == 'X') {
12+
visited[i][j] = true;
13+
} else {
14+
dfs(board, i, j, visited, true);
15+
}
16+
}
17+
}
18+
for (let i = 0; i < m; ++i) {
19+
for (let j of [0, n - 1]) {
20+
if (board[i][j] == 'X') {
21+
visited[i][j] = true;
22+
} else {
23+
dfs(board, i, j, visited, true);
24+
}
25+
}
26+
}
27+
for (let i = 1; i < m - 1; ++i) {
28+
for (let j = 1; j < n - 1; ++j) {
29+
!visited[i][j] && dfs(board, i, j, visited);
30+
}
31+
}
32+
};
33+
34+
function dfs(board: string[][], i: number, j: number, visited: boolean[][], edge = false): void {
35+
let m = board.length, n = board[0].length;
36+
if (i < 0 || i > m - 1 || j < 0 || j > n - 1 || visited[i][j]) {
37+
return;
38+
}
39+
40+
visited[i][j] = true;
41+
if (board[i][j] == 'X') {
42+
return;
43+
}
44+
if (!edge) {
45+
board[i][j] = 'X';
46+
}
47+
for (let [dx, dy] of [[0, 1], [0, -1], [1, 0], [-1, 0]]) {
48+
let x = i + dx, y = j + dy;
49+
dfs(board, x, y, visited, edge);
50+
}
51+
}

0 commit comments

Comments
 (0)