题目:
岛屿数量:给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。
思路:
类似机器人走迷宫。本题使用的沉岛的思想。
程序:
class Solution: def numIslands(self, grid: List[List[str]]) -> int: if not grid: return 0 result = 0 for index1 in range(len(grid)): for index2 in range(len(grid[0])): if grid[index1][index2] == '1': self.auxiliary(grid, index1, index2) result += 1 return result def auxiliary(self, grid: List[List[str]], index1: int, index2: int): if index1 < 0 or index2 < 0 or index1 >= len(grid) or index2 >= len(grid[0]) or grid[index1][index2] != '1': return grid[index1][index2] = '0' self.auxiliary(grid, index1 - 1, index2) self.auxiliary(grid, index1 + 1, index2) self.auxiliary(grid, index1, index2 - 1) self.auxiliary(grid, index1, index2 + 1)