LeetCode 200. 岛屿数量(DFS解法)👨💻
题目描述
给定一个由 0
和 1
组成的二维网格,统计其中岛屿的数量。岛屿被定义为相邻的 1
(上下左右相邻)所构成的区域,且被 0
包围。例如:
输入:
11000
11000
00100
00011
输出:1
解题思路
使用**深度优先搜索(DFS)**遍历每个岛屿区域:
- 遍历网格的每个单元格,当遇到未访问的
1
时,启动DFS - DFS过程中标记所有相连的
1
为已访问 - 每次启动DFS时,岛屿数量加1
- 时间复杂度为
O(m*n)
,其中m
和n
是网格的行数和列数
⚠️ 注意:DFS会修改原数组,若需保留原数据可先复制一份
代码示例(Python)
def numIslands(grid):
if not grid:
return 0
rows, cols = len(grid), len(grid[0])
count = 0
def dfs(r, c):
if r < 0 or c < 0 or r >= rows or c >= cols or grid[r][c] == '0':
return
grid[r][c] = '0' # 标记为已访问
dfs(r+1, c)
dfs(r-1, c)
dfs(r, c+1)
dfs(r, c-1)
for r in range(rows):
for c in range(cols):
if grid[r][c] == '1':
dfs(r, c)
count += 1
return count