首先,想要找岛,肯定是要逐个遍历的,否则肯定会漏岛。
其次,我怎么知道两个点是否属于一个岛?只有一个方法,我踏上一个岛的某个点时,我就分别往四周走,且把当前地块毁掉,就像瘟疫一样。
于是,代码就好写了。外面两个循环,当看到1了,就是找到岛了,然后启动毁岛程序func。func做两件事,一个是摧毁当前地块,一个是往四周移动,停止条件是当前地块的四周都不是岛,或者碰到了边界,则不需要继续破坏了。
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
m, n = len(grid), len(grid[0])
def func(i: int, j: int) -> None:
# 出界,或者不是 '1',就不再往下递归
if i < 0 or i >= m or j < 0 or j >= n or grid[i][j] != '1':
return
grid[i][j] = '0'
dfs(i, j - 1)
dfs(i, j + 1)
dfs(i - 1, j)
dfs(i + 1, j)
ans = 0
for i, row in enumerate(grid):
for j, c in enumerate(row):
if c == '1':
func(i, j)
ans += 1
return ans