题目
给出一个包含’0’和‘1’的矩阵,'0’表示海洋,‘1’表示陆地,相邻的‘1’属于同一个岛屿,求这个矩阵中共有多少岛屿
相邻
:一个元素的上下左右位置的元素为相邻
例:
[[1,1,0,0,0],
[0,1,0,1,1],
[0,0,0,1,1],
[0,0,0,0,0],
[0,0,1,1,1]],共有3个岛屿
DFS
设置一个计数器统计岛屿数量,初始为0
遍历整个数组,若当前元素为1,说明发现了1个新的岛屿,计数器+1,并从当前元素出发进行DFS
DFS的过程:
- 检查下标i,j是否越界,越界则返回
- 检查当前元素是否为0,是0则返回
- 若当前元素为1,将当前元素置0,再对当前元素的上、下、左、右元素继续DFS
代码
class Solution:
def rrErase(self, grid, i, j):
if i < 0 or i >= len(grid):
return
if j < 0 or j >= len(grid[i]):
return
if grid[i][j] == '0':
return
else:
grid[i][j] = '0'
self.rrErase(grid, i - 1, j)
self.rrErase(grid, i, j - 1)
self.rrErase(grid, i + 1, j)
self.rrErase(grid, i, j + 1)
def solve(self, grid):
if not grid:
return None
islands = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == '1':
islands += 1
self.rrErase(grid, i, j)
return islands