An image is represented by an m x n integer grid image where image[i][j] represents the pixel value of the image. You are also given three integers sr, sc, and newColor. You should perform a flood fill on the image starting from the pixel image[sr][sc].
To perform a flood fill, consider the starting pixel, plus any pixels connected 4-directionally to the starting pixel of the same color as the starting pixel, plus any pixels connected 4-directionally to those pixels (also with the same color), and so on. Replace the color of all of the aforementioned pixels with newColor.
Return the modified image after performing the flood fill.
Input: image = [[1,1,1],[1,1,0],[1,0,1]], sr = 1, sc = 1, newColor = 2
Output: [[2,2,2],[2,2,0],[2,0,1]]
Explanation: From the center of the image with position (sr, sc) = (1, 1) (i.e., the pixel with value 1),
all pixels connected by a path of the same color as the starting pixel are colored with the new color.
Note the bottom corner is not colored 2, because it is not 4-directionally connected to the starting pixel.
Input: image = [[0,0,0],[0,0,0]], sr = 0, sc = 0, newColor = 2
Output: [[2,2,2],[2,2,2]]
m == image.lengthn == image[i].length1 <= m, n <= 500 <= image[i][j], newColor < 2^160 <= sr < m0 <= sc < nsr and sc are within the bounds of the image? Yes, the constraints guarantee that 0 <= sr < m and 0 <= sc < n.We will use Depth-First Search (DFS) to perform the flood fill. Here are the detailed steps:
image[sr][sc] is already equal to the newColor. If it is, simply return the image as no changes are needed.newColor.def floodFill(image, sr, sc, newColor):
def dfs(r, c):
if r < 0 or r >= len(image) or c < 0 or c >= len(image[0]) or image[r][c] != originalColor:
return
image[r][c] = newColor
dfs(r + 1, c)
dfs(r - 1, c)
dfs(r, c + 1)
dfs(r, c - 1)
originalColor = image[sr][sc]
if originalColor == newColor:
return image
dfs(sr, sc)
return image
# Example usage:
image = [[1, 1, 1], [1, 1, 0], [1, 0, 1]]
sr = 1
sc = 1
newColor = 2
print(floodFill(image, sr, sc, newColor)) # Output: [[2, 2, 2], [2, 2, 0], [2, 0, 1]]
The time complexity is O(m * n) where m is the number of rows and n is the number of columns in the image. In the worst-case scenario, every pixel might need to be visited and colored.
This solution is efficient given the constraints.
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?