Skip to content

Commit 247403b

Browse files
Create 200. 岛屿数量.md
1 parent 4b79baf commit 247403b

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#### 200. 岛屿数量
2+
3+
难度:中等
4+
5+
---
6+
7+
给你一个由 `'1'`(陆地)和 `'0'`(水)组成的的二维网格,请你计算网格中岛屿的数量。
8+
9+
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
10+
11+
此外,你可以假设该网格的四条边均被水包围。
12+
13+
**示例 1:**
14+
15+
```
16+
输入:grid = [
17+
["1","1","1","1","0"],
18+
["1","1","0","1","0"],
19+
["1","1","0","0","0"],
20+
["0","0","0","0","0"]
21+
]
22+
输出:1
23+
```
24+
25+
**示例 2:**
26+
27+
```
28+
输入:grid = [
29+
["1","1","0","0","0"],
30+
["1","1","0","0","0"],
31+
["0","0","1","0","0"],
32+
["0","0","0","1","1"]
33+
]
34+
输出:3
35+
```
36+
37+
**提示:**
38+
39+
* `m == grid.length`
40+
* `n == grid[i].length`
41+
* `1 <= m, n <= 300`
42+
* `grid[i][j]` 的值为 `'0'``'1'`
43+
44+
---
45+
46+
深度搜索优先:
47+
48+
遍历每一格数据,如果当前格数据为 `1`,则岛屿数量加一,并且将四周(上下左右)的 `1` 变为 `0`,不断扩散(深度搜索)
49+
50+
```Go
51+
func numIslands(grid [][]byte) int {
52+
res := 0
53+
var dfs func(grid [][]byte, i, j int)
54+
dfs = func(grid [][]byte, i, j int) {
55+
if grid[i][j] == '0' {
56+
return
57+
}
58+
m, n := len(grid), len(grid[0])
59+
grid[i][j] = '0'
60+
if i > 0 {
61+
dfs(grid, i - 1, j)
62+
}
63+
if i < m - 1 {
64+
dfs(grid, i + 1, j)
65+
}
66+
if j > 0 {
67+
dfs(grid, i, j - 1)
68+
}
69+
if j < n - 1 {
70+
dfs(grid, i, j + 1)
71+
}
72+
}
73+
for i := 0; i < len(grid); i++ {
74+
for j := 0; j < len(grid[0]); j++ {
75+
if grid[i][j] == '1' {
76+
dfs(grid, i, j)
77+
res ++
78+
}
79+
}
80+
}
81+
return res
82+
}
83+
```

0 commit comments

Comments
 (0)