File tree 1 file changed +62
-0
lines changed 1 file changed +62
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * 岛屿问题
3
+
4
+ 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
5
+
6
+ 示例 1:
7
+
8
+ 输入:
9
+ 11110
10
+ 11010
11
+ 11000
12
+ 00000
13
+
14
+ 输出: 1
15
+ 示例 2:
16
+
17
+ 输入:
18
+ 11000
19
+ 11000
20
+ 00100
21
+ 00011
22
+
23
+ 输出: 3
24
+
25
+ 来源:力扣(LeetCode)
26
+ 链接:https://leetcode-cn.com/problems/number-of-islands
27
+ 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
28
+ */
29
+ var numIslands = function ( grid ) {
30
+ let count = 0
31
+ for ( let i = 0 ; i < grid . length ; i ++ ) {
32
+ let row = grid [ i ]
33
+ for ( let j = 0 ; j < row . length ; j ++ ) {
34
+ if ( row [ j ] === '1' ) {
35
+ dfs ( grid , i , j )
36
+ count ++
37
+ }
38
+ }
39
+ }
40
+ return count
41
+ } ;
42
+
43
+ function dfs ( grid , i , j ) {
44
+ let point = grid [ i ] && grid [ i ] [ j ]
45
+ if ( point === '0' || point === undefined ) {
46
+ return
47
+ }
48
+ grid [ i ] [ j ] = '0'
49
+
50
+ dfs ( grid , i - 1 , j ) // 上
51
+ dfs ( grid , i + 1 , j ) // 下
52
+ dfs ( grid , i , j - 1 ) // 左
53
+ dfs ( grid , i , j + 1 ) // 右
54
+ }
55
+
56
+ /**
57
+ * 很经典的 dfs 问题,很棒很棒的思路,当找到一个点为1的时候,先记录数量加一。
58
+
59
+ 然后对于每个点递归的去遍历自己和上下左右的节点,如果值为1就置为0再继续遍历上下左右,这样直到遇到某一边本身就为0的时候停止。
60
+
61
+ 这样,一片 “值为1的岛屿” 就全部归零了。
62
+ */
You can’t perform that action at this time.
0 commit comments