• 面试题 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
  • 相关阅读:
    回溯法---哈密顿回路(5)
    回溯法---n皇后问题(4)
    回溯法---n-着色问题(3)
    回溯法--算法框架(2)
    创建二叉树的所有深度上的节点链表
    笔试
    笔试 (2)
    LeetCode278-第一个错误的版本(二分查找)
    LeetCode46-全排列(递归)
    LeetCode258-各位相加(猜想公式)
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13875624.html
Copyright © 2020-2023  润新知