(刷题笔记) Leetcode 面试题 08.10. 颜色填充

目录

  • 题目
  • 解题思路
  • 代码(C++)

题目

编写函数,实现许多图片编辑软件都支持的「颜色填充」功能。

待填充的图像用二维数组 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 ,因为它不属于初始坐标点的周围区域。

提示:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/color-fill-lcci

解题思路

这道题目是我按标签顺着找的,所以直接就能顺着深度优先搜索(dfs)的思想去想。
其实看到提干描述还是挺亲切的,学了一年多图像,虽然都只是调调函数调调参,但是这些关于图像描述的算法看到还是挺熟悉的。
很像是查找连通域里面的一步,从函数名也可以看到是floodfill,漫水填充。

dfs的思路就不多说了,最主要的是学会拆分题目,想好每一步要做什么,以及终止的条件。

这里终止的条件比较明显,一个是图像矩阵的边界,一个是不满足连通的要求。这里的连通就是题目里描述的四领域里有相同的值,这里拆解为dfs,所以不考虑邻域,就考虑值是否相等。

然后就是dfs拆解出来的实现检查四邻域。

代码(C++)

class 

你可能感兴趣的:(刷题笔记,leetcode,dfs)