本题的主要思想:传入的image是一个二维数组,模拟一个二维图像,每个像素点都有一种它原来的颜色(用一个数字表示,如果像素点的数字为0,则无颜色。),题目会传入一个新的颜色(新的数字),与原有的数字进行相比,像素点原有的颜色(本题定义为oldcolor)与newcolor对比,如果不一致则重新渲染。
让我们来看看代码及解析
var floodFill = function(image, sr, sc, newColor) {
//首先判断题目要传入的新颜色与像素点原有的颜色是否一致,如果一致,则直接返回原来的image(二维数组)。
if(image[sr][sc] === newColor){
return image
}
//如果要检测的像素点的颜色与newcolor不一致,则为旧颜色,那么该像素点需要渲染改成newcolor。
const oldColor = image[sr][sc]
deepChange(sr,sc)
//接下来就是对他进行深度遍历,判断周围是否也具有oldcolor.有也需要一起渲染。
function deepChange(sr,sc){
//进入函数首先判断越界问题,和检查像素点的颜色。
if(sr<0 || sr>=image.length || sc<0 || sc>=image[0].length || image[sr][sc]!==oldColor ){
return;
}
//oldcolor变为newcolor。
image[sr][sc] = newColor
//四周的深度遍历(递归解法)。
deepChange(sr+1,sc)
deepChange(sr-1,sc)
deepChange(sr,sc+1)
deepChange(sr,sc-1)
}
return image
};