0
点赞
收藏
分享

微信扫一扫

【LeetCode】200. 岛屿数量

1.​​题目​​

2.思想

(1)深搜找联通块即可
(2)深搜的同时需要标记这个地方是否访问过
(3)需要注意的是: 因为​​​grid​​中存储的是字符型,所以要注意不是数值型1

3.代码

class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
m,n = len(grid),len(grid[0])
# 标记数组
vis = [[0 for i in range(n)] for j in range(m)]
for i in range(m):
for j in range(n): # 修改为int型
grid[i][j] = int(grid[i][j])

island = 0
for i in range(m):
for j in range(n):
if vis[i][j] == 0 and grid[i][j] == 1: # 尚未访问过
self.dfs(i,j,m,n,vis,grid)
island += 1
return island

def dfs(self,x,y,m,n,vis,grid):
vis[x][y] = 1 # 更改访问标志
# 深搜各个方向
# 满足边界条件& 尚未访问过& 是陆地
if x+1 < m and vis[x+1][y] == 0 and grid[x+1][y]==1:
self.dfs(x+1,y,m,n,vis,grid)
if x-1 >= 0 and vis[x-1][y] == 0 and grid[x-1][y]==1:
self.dfs(x-1,y,m,n,vis,grid)

if y-1 >= 0 and vis[x][y-1] == 0 and grid[x][y-1]==1:
self.dfs(x,y-1,m,n,vis,grid)

if y+1 < n and vis[x][y+1] == 0 and grid[x][y+1]==1:
self.dfs(x,y+1,m,n,vis,grid)


举报

相关推荐

0 条评论