Number of Islands — BFS or DFS Flood Fill

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 285 · Number of Islands

Difficulty: Medium · Pattern: Grid BFS/DFS

Solutions

# Python — BFS
from collections import deque
def numIslands(grid):
    m, n = len(grid), len(grid[0])
    count = 0
    for r in range(m):
        for c in range(n):
            if grid[r][c] == '1':
                count += 1
                queue = deque([(r,c)])
                grid[r][c] = '0'
                while queue:
                    x, y = queue.popleft()
                    for dx, dy in [(0,1),(0,-1),(1,0),(-1,0)]:
                        nx, ny = x+dx, y+dy
                        if 0<=nx<m and 0<=ny<n and grid[nx][ny]=='1':
                            grid[nx][ny]='0'
                            queue.append((nx,ny))
    return count
// Java — DFS
public int numIslands(char[][] grid) {
    int m=grid.length, n=grid[0].length, count=0;
    for (int r=0;r<m;r++) for (int c=0;c<n;c++)
        if (grid[r][c]=='1') { dfs(grid,r,c); count++; }
    return count;
}
void dfs(char[][] grid, int r, int c) {
    if (r<0||r>=grid.length||c<0||c>=grid[0].length||grid[r][c]!='1') return;
    grid[r][c]='0';
    dfs(grid,r+1,c); dfs(grid,r-1,c); dfs(grid,r,c+1); dfs(grid,r,c-1);
}

Complexity

  • Time: O(m*n)
  • Space: O(min(m,n)) BFS queue

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro