LC每日一题|20240513 - 994. 腐烂的橘子

65 阅读1分钟

LC每日一题|20240513 - 994. 腐烂的橘子

在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:

  • 值 0 代表空单元格;
  • 值 1 代表新鲜橘子;
  • 值 2 代表腐烂的橘子。

每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。

返回 直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1 。

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 10
  • grid[i][j] 仅为 01 或 2

题目等级:Medium

解题思路

非常简单的一道BFS问题,无需赘述~

AC代码

class Solution {
    fun orangesRotting(grid: Array<IntArray>): Int {
        var rest = 0
        val d = arrayOf(
            intArrayOf(0, 1), intArrayOf(1, 0), 
            intArrayOf(0, -1), intArrayOf(-1, 0)
        )
        val queue = ArrayDeque<IntArray>()
        for (i in grid.indices) for (j in grid[0].indices) {
            when (grid[i][j]) {
                1 -> rest++
                2 -> queue.addLast(intArrayOf(i, j))
            }
        }
        var res = -1
        while (queue.isNotEmpty()) {
            repeat(queue.size) {
                val cur = queue.removeFirst()
                d.forEach {
                    val x = cur[0] + it[0]
                    val y = cur[1] + it[1]
                    if (x in grid.indices && y in grid[0].indices) {
                        if (grid[x][y] == 1) {
                            rest--
                            grid[x][y] = 2
                            queue.addLast(intArrayOf(x, y))
                        }
                    }
                }
            }
            res++
        }
        return if (rest > 0) -1 else Math.max(0, res)
    }
}