leetcode_733. 图像渲染 python3

一、题目内容

有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。

给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。

为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。

最后返回经过上色渲染后的图像。

示例 1:

输入: 
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
因为它不是在上下左右四个方向上与初始点相连的像素点

注意:

image 和 image[0] 的长度在范围 [1, 50] 内。
给出的初始点将满足 0 <= sr < image.length 和 0 <= sc < image[0].length。
image[i][j] 和 newColor 表示的颜色值在范围 [0, 65535]内。

二、解题思路

上下左右四个方向递归涂色,注意如果涂的颜色和原来的颜色一致则直接返回image,否则将永远递归,报错

RecursionError: maximum recursion depth exceeded in comparison

三、代码

class Solution:
    def floodFill(self, image, sr, sc, newColor):
        origin = image[sr][sc]
        if origin == newColor:
            return image
        def iter_dfs(x, y, origin):
            if 0 <= x < len(image) and 0 <= y < len(image[0]) and image[x][y] == origin:
                image[x][y] = newColor
                iter_dfs(x + 1, y, origin)
                iter_dfs(x - 1, y, origin)
                iter_dfs(x, y + 1, origin)
                iter_dfs(x, y - 1, origin)
        iter_dfs(sr, sc, origin)
        return image


if __name__ == '__main__':
    # image = [[1,1,1],
    #          [1,1,0],
    #          [1,0,1]]
    image = [[0,0,0],
             [0,1,1]]
    sr = 1
    sc = 1
    newColor = 1
    s = Solution()
    ans = s.floodFill(image, sr, sc, newColor)
    print(ans)
悲恋花丶无心之人 CSDN认证博客专家 深度学习 神经网络 Pytorch
计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。
个人GitHub网址为:https://github.com/nickhuang1996
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值