DEV Community

tracelit
tracelit

Posted on • Originally published at tracelit.dev

LeetCode 200: Number Of Islands — Step-by-Step Visual Trace

Medium — Graph | Depth-First Search | Matrix | Connected Components

The Problem

Given a 2D grid map of '1's (land) and '0's (water), count the number of islands where an island is surrounded by water and formed by connecting adjacent lands horizontally or vertically.

Approach

Use depth-first search (DFS) to explore each unvisited land cell ('1') and mark all connected land cells as visited by changing them to '0'. Each DFS traversal represents one complete island, so increment the island counter for each DFS call initiated from the main loop.

Time: O(m × n) · Space: O(m × n)

Code

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        if not grid:
            return 0

        rows, cols = len(grid), len(grid[0])
        count = 0

        def dfs(row, col):
            if (
                row < 0
                or row >= rows
                or col < 0
                or col >= cols
                or grid[row][col] == "0"
            ):
                return

            grid[row][col] = "0"  # Mark the cell as visited
            directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]

            for dr, dc in directions:
                dfs(row + dr, col + dc)

        for i in range(rows):
            for j in range(cols):
                if grid[i][j] == "1":
                    count += 1
                    dfs(i, j)

        return count
Enter fullscreen mode Exit fullscreen mode

Watch It Run

Watch the algorithm run step by step

Watch the algorithm run step by step

Open interactive visualization

Try it yourself: Open TraceLit and step through every line.


Built with TraceLit — the visual algorithm tracer for LeetCode practice.

Top comments (0)