题目描述
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
题目链接
难度等级:中等
示例
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
Python 代码
深度优先搜索
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
rows = len(grid)
if rows <= 0:return 0
columns = len(grid[0])
n_count = 0
for i in range(rows):
for j in range(columns):
if grid[i][j] == '1':
n_count += 1
self.isNerbor(grid,i,j)
return n_count
def isNerbor(self,grid,row,column):
if 0<=row<len(grid) and 0<=column < len(grid[0]) and grid[row][column] == '1':
grid[row][column] = '0'
self.isNerbor(grid,row-1,column)
self.isNerbor(grid,row+1,column)
self.isNerbor(grid,row,column-1)
self.isNerbor(grid,row,column+1)
else :return
广度优先搜索
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
if len(grid)<= 0 or len(grid[0])<= 0: return 0
rows,columns = len(grid),len(grid[0])
queue,n_count = [],0
for i in range(rows):
for j in range(columns):
if grid[i][j] == '1':
n_count += 1
queue.append([i,j])
while queue:
row,column = queue.pop(0)
if 0<=row< rows and 0<= column < columns and grid[row][column] == '1':
grid[row][column] = '0'
queue.append([row-1,column])
queue.append([row+1,column])
queue.append([row,column-1])
queue.append([row,column+1])
return n_count