【LeetCode】200. 岛屿的个数

时间:2022-01-02 05:47:49

题目

给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

示例 1:输入:

11110
11010
11000
00000 输出: 1

示例 2:输入:

11000
11000
00100
00011 输出: 3

思路

DFS,深度遍历搜索

visited记录遍历过的陆地

代码

class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
if len(grid) == 0:
return 0
#visited全部初始化为0
row, col = len(grid), len(grid[0])
visited = [[0 for x in range(0, col)] for y in range(0, row)] count=0
for i in range(0,row):
for j in range(0,col):
if visited[i][j]==0 and grid[i][j]=='1':
self.dfs(grid,i,j,visited)
count += 1
return count def dfs(self, grid, i, j, visited):
if i < 0 or i >= len(grid):
return
if j < 0 or j >= len(grid[0]):
return
if grid[i][j]=='0' or visited[i][j]==1:
return
visited[i][j] = 1 #遍历过的地方置为1
#上下左右四个方向遍历
self.dfs(grid, i-1, j, visited)
self.dfs(grid, i+1, j, visited)
self.dfs(grid, i, j-1, visited)
self.dfs(grid, i, j+1, visited)