Escape the Spreading Fire LeetCode solution in Python

1
class Solution(object):
2
def maximumMinutes(self, A):
3
m, n = len(A), len(A[0])
4
inf = 10**10
5
d = [[0, 1], [1, 0], [0, -1], [-1, 0]]
6
fires = [[i, j, 0] for i in range(m) for j in range(n) if A[i][j] == 1]
7
A = [[inf if a < 2 else -1 for a in r] for r in A]
8

9
def bfs(queue, seen):
10
for i, j, t in queue:
11
if seen[i][j] < inf:
12
continue
13
seen[i][j] = t
14
for di, dj in d:
15
x, y = i + di, j + dj
16
if (
17
0 <= x < m
18
and 0 <= y < n
19
and seen[x][y] >= inf
20
and t + 1 < A[x][y]
21
):
22
queue.append([x, y, t + 1])
23

24
def die(t):
25
seen = [[inf + 10] * n for i in range(m)]
26
bfs([[0, 0, t]], seen)
27
return seen[-1][-1] > A[-1][-1]
28

29
bfs(fires, A)
30
A[-1][-1] += 1
31
return bisect_left(range(10**9 + 1), True, key=die) - 1

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0