Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit e9119f1

Browse files
committed
feat: 岛屿问题
1 parent 42e2d3f commit e9119f1

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

算法/岛屿数量.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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+
*/

0 commit comments

Comments
 (0)