1 代表岛屿, 0 代表海洋, 1 被 0 包围算作一个岛屿. 只要1被连接, 都只能算一个岛屿.
解题思路
用DFS解题. 遍历grid所有点, 如果grid[i][j]==1, 则对grid[i][j]由四个方向进行DFS, 把所有经过的点标记为x(表示去过), 所以每次遇到grid[i][j]==1的点一定是一个新的岛屿.
代码
Python
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
if not grid:
return 0
def explore(i,j):
# i was here
grid[i][j] = 'x'
if i > 0 and grid[i - 1][j] == '1':
explore(i - 1,j)
if j > 0 and grid[i][j - 1] == '1':
explore(i,j - 1)
if i < col - 1 and grid[i + 1][j] == '1':
explore(i + 1,j)
if j < row - 1 and grid[i][j + 1] == '1':
explore(i,j + 1)
noOfIsland = 0
col = len(grid)
row = len(grid[0])
for i in range(col):
for j in range(row):
if grid[i][j] == '1':
noOfIsland += 1
# Mark all the points in this island i.e all the points that can be reached from this point
explore(i,j)
return noOfIsland