题目难度: 简单
原题链接
今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~
编写函数,实现许多图片编辑软件都支持的「颜色填充」功能。
待填充的图像用二维数组 image 表示,元素为初始颜色值。初始坐标点的行坐标为 sr 列坐标为 sc。需要填充的新颜色为 newColor 。
「周围区域」是指颜色相同且在上、下、左、右四个方向上存在相连情况的若干元素。
请用新颜色填充初始坐标点的周围区域,并返回填充后的图像。
O(RC)
: 最差情况下需要填充整个图, 总共遍历 R*C 个点O(RC)
: 使用一个队列存储当前需要遍历的点, 最差情况仍然存 R*C 个点class Solution:
def floodFill(self, image: List[List[int]], sr: int, sc: int, newColor: int) -> List[List[int]]:
# BFS, 遍历到即可涂色
oldColor = image[sr][sc]
if oldColor == newColor:
# 两个颜色相等, 直接返回原图片
return image
rows, cols = len(image), len(image[0])
q = [(sr, sc)]
for r, c in q:
image[r][c] = newColor
for rr, cc in ((r + 1, c), (r - 1, c), (r, c + 1), (r, c - 1)):
if 0 <= rr < rows and 0 <= cc < cols and image[rr][cc] == oldColor:
# 相邻点没超出边界, 且颜色等于初始颜色时才遍历它
q.append((rr, cc))
return image
大家可以在下面这些地方找到我~
我的 GitHub
我的 Leetcode
我的 CSDN
我的知乎专栏
我的头条号
我的牛客网博客
我的公众号: 算法精选, 欢迎大家扫码关注~