LeetCode 200. 岛屿数量(DFS解法)👨‍💻

题目描述

给定一个由 01 组成的二维网格,统计其中岛屿的数量。岛屿被定义为相邻的 1(上下左右相邻)所构成的区域,且被 0 包围。例如:

输入:

11000
11000
00100
00011

输出:1

解题思路

使用**深度优先搜索(DFS)**遍历每个岛屿区域:

  1. 遍历网格的每个单元格,当遇到未访问的 1 时,启动DFS
  2. DFS过程中标记所有相连的 1 为已访问
  3. 每次启动DFS时,岛屿数量加1
  4. 时间复杂度为 O(m*n),其中 mn 是网格的行数和列数

⚠️ 注意: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

扩展阅读

Leetcode_island_problem