zoukankan      html  css  js  c++  java
  • 面试题 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
  • 相关阅读:
    Java代码输出到txt文件(申请专利贴源码的必备利器)
    Vmware10组建局域网
    Ubuntu14.04更换阿里云源
    Ubuntu16.04如何彻底删除Apache2
    HustOJ平台搭建
    Centos 7 联想Y430P无线网卡驱动安装 过程参考
    Windows远程CentOS桌面
    centos 7 查看系统/硬件信息及运维常用命令+联想Y430P无线网卡驱动安装
    zookeeper工作原理、安装配置、工具命令简介
    centos 7 安装五笔输入法
  • 原文地址:https://www.cnblogs.com/yeshengCqupt/p/13875624.html
Copyright © 2011-2022 走看看