leetcode_733. 图像渲染 python3

举报
悲恋花丶无心之人 发表于 2021/02/04 22:13:15 2021/02/04
【摘要】 一、题目内容 有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。 给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。 为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的...

一、题目内容

有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 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

三、代码


  
  1. class Solution:
  2. def floodFill(self, image, sr, sc, newColor):
  3. origin = image[sr][sc]
  4. if origin == newColor:
  5. return image
  6. def iter_dfs(x, y, origin):
  7. if 0 <= x < len(image) and 0 <= y < len(image[0]) and image[x][y] == origin:
  8. image[x][y] = newColor
  9. iter_dfs(x + 1, y, origin)
  10. iter_dfs(x - 1, y, origin)
  11. iter_dfs(x, y + 1, origin)
  12. iter_dfs(x, y - 1, origin)
  13. iter_dfs(sr, sc, origin)
  14. return image
  15. if __name__ == '__main__':
  16. # image = [[1,1,1],
  17. # [1,1,0],
  18. # [1,0,1]]
  19. image = [[0,0,0],
  20. [0,1,1]]
  21. sr = 1
  22. sc = 1
  23. newColor = 1
  24. s = Solution()
  25. ans = s.floodFill(image, sr, sc, newColor)
  26. print(ans)

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/108283118

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。