【javascript 算法 力扣刷题:733图像渲染】

242 阅读1分钟

本题的主要思想:传入的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
};