Solution
Approach 1: BreadthFirst Search
Intuition
Every turn, the rotting spreads from each rotting orange to other adjacent oranges. Initially, the rotten oranges have 'depth' 0 [as in the spanning tree of a graph], and every time they rot a neighbor, the neighbors have 1 more depth. We want to know the largest possible depth.
Algorithm
We can use a breadthfirst search to model this process. Because we always explore nodes (oranges) with the smallest depth first, we're guaranteed that each orange that becomes rotten does so with the lowest possible depth number.
We should also check that at the end, there are no fresh oranges left.
Complexity Analysis

Time Complexity: , where is the number of cells in the grid.

Space Complexity: .
Analysis written by: @awice.