09 flood-fill

76 阅读1分钟

leetcode.cn/problems/fl…

解题思路

  1. 每次修改给一个方格的颜色都需要遍历四个放下 上下左右,这种重复的操作可以交给递归去做
  2. 如果一开始的颜色就是目标颜色,直接返回

代码

/**
 * @param {number[][]} image
 * @param {number} sr
 * @param {number} sc
 * @param {number} color
 * @return {number[][]}
 */
var floodFill = function (image, sr, sc, newColor) {
    const color = image[sr][sc]
    if(color === newColor) return image
    const iter = (sr, sc) => {
        if (image[sr][sc] === color) {
            image[sr][sc] = newColor
            // 上
            if (sr >= 1) {
                iter(sr - 1, sc)
            }
            // 下
            if (sr + 1 < image.length) {
                iter(sr + 1, sc)
            }
            // 左
            if (sc >= 1) {
                iter(sr, sc - 1)
            }
            // 右
            if (sc + 1 < image[0].length) {
                iter(sr, sc + 1)
            }
        }
    }
    iter(sr, sc)
    return image
};