面试题 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
原文地址:https://www.cnblogs.com/yeshengCqupt/p/13875624.html