Проблема с гниющими апельсинами

В заданной сетке каждая ячейка может иметь одно из трех значений:

  • значение 0 представляет собой пустую ячейку;
  • значение 1 представляет свежий апельсин;
  • значение 2 представляет гнилой апельсин.

Каждую минуту любой свежий апельсин, примыкающий (в четырех направлениях) к гнилому апельсину, становится гнилым.

Возвращает минимальное количество минут, которое должно пройти, пока ни в одной ячейке не останется свежего апельсина. Если это невозможно, вместо этого верните -1.

Пример 1:

Input: [[2,1,1],[1,1,0],[0,1,1]]
Output: 4

Пример 2:

Input: [[2,1,1],[0,1,1],[1,0,1]]
Output: -1
Explanation:  The orange in the bottom left corner (row 2, column 0) is never rotten, because rotting only happens 4-directionally.

Пример 3:

Input: [[0,2]]
Output: 0
Explanation:  Since there are already no fresh oranges at minute 0, the answer is just 0.

Примечание.

  1. 1 <= grid.length <= 10
  2. 1 <= grid[0].length <= 10
  3. grid[i][j] — это только 0, 1 или 2.

Решение

В первую очередь нужно проверить, что есть хотя бы свежий апельсин и что свежие апельсины могут быть гнилыми.

Затем нам просто нужно перебрать сетку, составляя каждую итерацию в минуту, и при нахождении свежего апельсина нам нужно проверить, не соседствует ли он с гнилым апельсином. Если это так, мы должны превратить этот апельсин в гнилой.

Имейте в виду использование скопированной сетки, потому что, если мы просто используем одну, мы получим неправильные значения для текущей минуты.

Здесь вы можете увидеть производительность моего решения (имейте в виду, что Runtime может варьироваться в зависимости от сервера):

Вы можете подписаться на меня в LinkedIn.