File tree Expand file tree Collapse file tree 1 file changed +62
-0
lines changed Expand file tree Collapse file tree 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