Isaac Emmanuel
09 Sept 2026•EasyGo / Python / TypeScript

Flood Fill

Recolor the connected component containing a starting image cell.

Run depth-first search from the starting cell, recoloring only in-bounds neighbors with the original color. Return early when the new color already matches.

Complexity

O(rows * columns) time in the worst case and O(rows * columns) recursion space.

Solution files

Go•flood-fill/solution.go
package main

func floodFill(image [][]int, sr int, sc int, color int) [][]int {
	original := image[sr][sc]
	if original == color {
		return image
	}
	var visit func(int, int)
	visit = func(row int, column int) {
		if row < 0 || row >= len(image) || column < 0 || column >= len(image[0]) || image[row][column] != original {
			return
		}
		image[row][column] = color
		visit(row-1, column)
		visit(row+1, column)
		visit(row, column-1)
		visit(row, column+1)
	}
	visit(sr, sc)
	return image
}
Python•flood-fill/solution.py
class Solution:
    def floodFill(self, image: list[list[int]], sr: int, sc: int, color: int) -> list[list[int]]:
        original = image[sr][sc]
        if original == color: return image
        def visit(row: int, column: int) -> None:
            if row < 0 or row == len(image) or column < 0 or column == len(image[0]) or image[row][column] != original: return
            image[row][column] = color
            visit(row - 1, column); visit(row + 1, column); visit(row, column - 1); visit(row, column + 1)
        visit(sr, sc)
        return image
TypeScript•flood-fill/solution.ts
function floodFill(image: number[][], sr: number, sc: number, color: number): number[][] {
  const original = image[sr][sc];
  if (original === color) return image;
  const visit = (row: number, column: number): void => {
    if (row < 0 || row >= image.length || column < 0 || column >= image[0].length || image[row][column] !== original) return;
    image[row][column] = color;
    visit(row - 1, column); visit(row + 1, column); visit(row, column - 1); visit(row, column + 1);
  };
  visit(sr, sc);
  return image;
}