https://leetcode.com/problems/flood-fill/ Easy

Условие

Вам дана целочисленная матрица image размером m x n, представляющая изображение, где image[i][j] обозначает цвет пикселя. Также даны три целых числа: sr, sc и color.

Выполните операцию "заливки" (flood fill) на изображении, начиная с пикселя image[sr][sc]. Замените цвет начального пикселя и всех соседних пикселей с тем же исходным цветом на новый цвет color.LeetCode

Соседние пиксели — это пиксели, которые имеют общую сторону с текущим пикселем (вверх, вниз, влево, вправо). Диагональные пиксели не считаются соседними.

Верните изменённую матрицу image после выполнения операции заливки.

Решение

class Solution {
    fun floodFill(image: Array<IntArray>, sr: Int, sc: Int, color: Int): Array<IntArray> {
        val originalColor = image[sr][sc]
        if (originalColor == color) return image

        val m = image.size
        val n = image[0].size
        val directions = arrayOf(
            intArrayOf(0, 1),
            intArrayOf(1, 0),
            intArrayOf(0, -1),
            intArrayOf(-1, 0)
        )

        fun dfs(r: Int, c: Int) {
            if (r < 0 || r >= m || c < 0 || c >= n || image[r][c] != originalColor) return
            image[r][c] = color
            for (dir in directions) {
                dfs(r + dir[0], c + dir[1])
            }
        }

        dfs(sr, sc)
        return image
    }
}