给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
循环2维数组,找到其值为1的元素,count++,
然后递归改变其上下左右为1的元素值为0,
class Solution:
# @param {boolean[][]} grid a boolean 2D matrix
# @return {int} an integer
def numIslands(self, grid):
# Write your code here
if grid is None: return None
if grid == []: return 0
# 当数组不为空时,计算行数和列数
self.n = len(grid)
self.m = len(grid[0])
x = 0
for i in range(self.n):
for j in range(self.m):
if grid[i][j] == '1':
x += 1
grid = self.change(grid,i,j)
return x
def change(self,grid,i,j):
grid[i][j] = '0'
if i > 0 and grid[i-1][j] == '1':
# 置当前点上边的点为0
grid = self.change(grid,i-1,j)
if i < self.n-1 and grid[i+1][j] == '1':
# 置当前点下边的点为0
grid = self.change(grid,i+1,j)
if j < self.m-1 and grid[i][j+1] == '1':
# 置当前点右方的点为0
grid = self.change(grid,i,j+1)
if j > 0 and grid[i][j-1] == '1':
# 置当前点左方的点为0
grid = self.change(grid,i,j-1)
return grid
网友评论