# 200 题岛屿数量

# 题目链接

# 难度:中等

# 思路分析:

递归

#

#

#

#

#

#

#

#

#

#

#

#

#

#

# 代码:

// 深度优先
var numIslands = function(grid) {
	let num = 0
	if (grid && grid.length) {
		const maxI = grid.length - 1,
			maxJ = grid[0].length - 1
		// 递归将连接的岛屿全都转为海水 连成一片
		function overturn(i, j) {
			if (i < 0 || j < 0 || i > maxI || j > maxJ) return
			if (grid[i][j] === '1') {
				grid[i][j] = '0'
				overturn(i, j - 1)
				overturn(i - 1, j)
				overturn(i + 1, j)
				overturn(i, j + 1)
			}
		}
		for (let i = 0; i < grid.length; i++) {
			for (let j = 0; j < grid[i].length; j++) {
				if (grid[i][j] === '1') {
					// 每次碰到1就说明有新的岛屿 与之相连的岛屿都已经递归转化成海水了
					num++
					overturn(i, j) // 将连接的岛屿全都转为海水 连成一片
				}
			}
		}
	}
	return num
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 鼓励我一下:

觉得还不错的话,给我的项目点个star

# 点个Star支持我一下~