File tree Expand file tree Collapse file tree 1 file changed +83
-0
lines changed Expand file tree Collapse file tree 1 file changed +83
-0
lines changed Original file line number Diff line number Diff line change
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
+ ```
You can’t perform that action at this time.
0 commit comments