09 Sept 2026Go / Python / TypeScriptEasy

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
  • Python flood-fill/solution.py
  • TypeScript flood-fill/solution.ts

Solution files

Goflood-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
}
Pythonflood-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 < class="syntax-number">0 or row == len(image) or column < class="syntax-number">0 or column == len(image[class="syntax-number">0]) or image[row][column] != original: return
            image[row][column] = color
            visit(row - class="syntax-number">1, column); visit(row + class="syntax-number">1, column); visit(row, column - class="syntax-number">1); visit(row, column + class="syntax-number">1)
        visit(sr, sc)
        return image
TypeScriptflood-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 < class="syntax-number">0 || row >= image.length || column < class="syntax-number">0 || column >= image[class="syntax-number">0].length || image[row][column] !== original) return;
    image[row][column] = color;
    visit(row - class="syntax-number">1, column); visit(row + class="syntax-number">1, column); visit(row, column - class="syntax-number">1); visit(row, column + class="syntax-number">1);
  };
  visit(sr, sc);
  return image;
}