给定一个由
'1'
(陆地)和'0'
(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:
输入: 11110 11010 11000 00000 输出: 1
示例 2:
输入: 11000 11000 00100 00011 输出: 3
tips: 上下左右深度优先遍历。从头到尾遍历数组,当前元素为1时进入dfs递归,将其上下左右皆change为0。每次开始进入递归时计数加一,故计数器的更改不能在递归中,我们将其放置在递归外。coding如下:
class Solution(object):
def numIslands(self, grid):
"""
:type grid: List[List[str]]
:rtype: int
"""
if grid==[[]] or grid==[]:
return 0
h=len(grid)
w=len(grid[0])
res = 0
def dfs(arr,i,j,w,h):
if i<0 or i>=h or j<0 or j>=w or arr[i][j]=="0":
return
arr[i][j]="0"
dfs(arr,i-1,j,w,h)
dfs(arr,i+1,j,w,h)
dfs(arr,i,j-1,w,h)
dfs(arr,i,j+1,w,h)
for i in range(h):
for j in range(w):
if grid[i][j]=="1":
res+=1
dfs(grid,i,j,w,h)
return res