岛屿数量
给你一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"] ] 输出:1
示例 2:
输入:grid = [ ["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"] ] 输出:3
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 300
grid[i][j]
的值为'0'
或'1'
第一次勇于尝试深搜啊!结果还成功了
思路是从左上开始[0][0],然后进行遍历,像是裂变一样周围只要是‘1’就吃掉并且重新赋值(代码还有可以优化的地方,比如dfs向四周扩散的时候可以先判断当前这个是‘1’再执行,我这个是先执行后进去判断了..)
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
def dfs (mat,i,j,color):
if i>=len(mat) or i<0 or j<0 or j>=len(mat[0]):
return None
if mat[i][j] == '1':
mat[i][j] = color
dfs(mat,i-1,j,color)
dfs(mat,i,j-1,color)
dfs(mat,i,j+1,color)
dfs(mat,i+1,j,color)
m = len(grid)
n = len(grid[0])
res = 0
color = -1
res_flag = 0
hashmap = {}
for i in range(m):
for j in range(n):
dfs(grid,i,j,color)
color -= 1
for i in range(m):
for j in range(n):
if grid[i][j] != '0' and res_flag>grid[i][j]:
res_flag = grid[i][j]
res+=1
return res