• 面试题 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
  • 相关阅读:
    static关键字用法(转载)
    浮点数资源(转)
    关于指针
    使用animate()的时候,有时候会出现移进移出的闪动问题
    要求开启密码大写提示
    如果layer层在iframe下不居中滚动
    自动适应iframe右边的高度
    jquery实现输入框实时输入触发事件代码
    使得最右边的元素右边框为0
    交互过程中封装了一些常用的函数(不断添加中)
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13875624.html
Copyright © 2020-2023  润新知