題目:
島嶼數量:給你一個由 '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)
