BFS with level count
Time O(rows × cols) Space O(rows × cols)Level-order BFS. When popping a border cell that isn't the entrance, return the level.
import java.util.*;
class Solution {
public int nearestExit(char[][] maze, int[] entrance) {
int m = maze.length, n = maze[0].length;
boolean[][] seen = new boolean[m][n];
Deque<int[]> q = new ArrayDeque<>();
q.offer(entrance);
seen[entrance[0]][entrance[1]] = true;
int[][] dirs = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
for (int steps = 0; !q.isEmpty(); steps++) {
for (int size = q.size(); size > 0; size--) {
int[] cell = q.poll();
int r = cell[0], c = cell[1];
boolean border = r == 0 || c == 0 || r == m - 1 || c == n - 1;
if (border && steps > 0) return steps;
for (int[] d : dirs) {
int nr = r + d[0], nc = c + d[1];
if (nr < 0 || nc < 0 || nr >= m || nc >= n || seen[nr][nc] || maze[nr][nc] == '+') continue;
seen[nr][nc] = true;
q.offer(new int[]{nr, nc});
}
}
}
return -1;
}
}Verdict: Standard.