# O(n) time || O(n) space
def flood_fill(self, image: List[List[int]], sr: int, sc: int, color: int) -> List[List[int]]:
    rows, cols = len(image), len(image[0])
    original_color = image[sr][sc]
    if original_color == color:
        return image
    def dfs(r, c):
        if 0 <= r < rows and 0 <= c < cols and image[r][c] == original_color:
            image[r][c] = color
            dfs(r - 1, c)
            dfs(r + 1, c)
            dfs(r, c - 1)
            dfs(r, c + 1)
    dfs(sr, sc)
    return image
- Get the original color of the pixel at 
(sr, sc). 
- Check for boundary conditions: If the starting pixel already has the target color, we don’t need to do anything.
 
- Recursive Flood Fill: Create a recursive function that:
- Changes the color of the current pixel.
 
- Recursively calls itself for the four adjacent pixels (up, down, left, right) if they are within bounds and have
the original color.
 
 
- Invoke the recursive function starting from 
(sr, sc).