面试题 08.10. 颜色填充(dfs)
- 题目描述
编写函数,实现许多图片编辑软件都支持的「颜色填充」功能。 待填充的图像用二维数组 image 表示,元素为初始颜色值。初始坐标点的横坐标为 sr 纵坐标为 sc。需要填充的新颜色为 newColor 。 「周围区域」是指颜色相同且在上、下、左、右四个方向上存在相连情况的若干元素。 请用新颜色填充初始坐标点的周围区域,并返回填充后的图像。 示例: 输入: image = [[1,1,1],[1,1,0],[1,0,1]] sr = 1, sc = 1, newColor = 2 输出:[[2,2,2],[2,2,0],[2,0,1]] 解释: 初始坐标点位于图像的正中间,坐标 (sr,sc)=(1,1) 。 初始坐标点周围区域上所有符合条件的像素点的颜色都被更改成 2 。 注意,右下角的像素没有更改为 2 ,因为它不属于初始坐标点的周围区域。
- 解法
这道题是属于用dfs结题的简单题吧。首先我们是可以很容易想到的,需要通过在中间点上下左右搜索并涂色,那么很重要的就是:(1)dfs结束条件 (2)对原来的数组的更改。
(1)dfs结束条件:当然是超出数组边界的时候
(2)对原来数组的更改,那么这个原来数组要作为全局变量
class Solution: def floodFill(self, image: List[List[int]], sr: int, sc: int, newColor: int) -> List[List[int]]: a = image[sr][sc] row = len(image) col = len(image[0]) if a== newColor: return image def dfs(sr, sc): if not 0 <= sr <row or not 0 <= sc <col or image[sr][sc] != a: # if sr <0 or sc <0 or sr > len(image) or sc > len(image[0]): return image[sr][sc] = newColor dfs(sr-1, sc) dfs(sr, sc-1) dfs(sr, sc + 1) dfs(sr + 1, sc) dfs(sr,sc) return image