Description
You are given an m x n integer matrix grid where each cell is either 0 (empty) or 1 (obstacle). You can move up, down, left, or right from and to an empty cell in one step.
Return the minimum number of steps to walk from the upper left corner (0, 0) to the lower right corner (m - 1, n - 1) given that you can eliminate at most k obstacles. If it is not possible to find such walk return -1.
Example 1:
Input: grid = [[0,0,0],[1,1,0],[0,0,0],[0,1,1],[0,0,0]], k = 1
Output: 6
Explanation:
The shortest path without eliminating any obstacle is 10.
The shortest path with one obstacle elimination at position (3,2) is 6. Such path is (0,0) -> (0,1) -> (0,2) -> (1,2) -> (2,2) -> (3,2) -> (4,2).
Example 2:
Input: grid = [[0,1,1],[1,1,1],[1,0,0]], k = 1
Output: -1
Explanation: We need to eliminate at least two obstacles to find such a walk.
Constraints:
m == grid.length
n == grid[i].length
1 <= m, n <= 40
1 <= k <= m * n
grid[i][j] is either 0 or 1.
grid[0][0] == grid[m - 1][n - 1] == 0
Solution
BFS, but use the remaining time for removing rocks as the visited label. It’s always better if we reach the same point, and the remaining chance to remove rocks is larger.文章来源:https://www.toymoban.com/news/detail-719526.html
Time complexity:
o
(
m
∗
n
)
o(m * n)
o(m∗n)
Space complexity:
o
(
m
∗
n
)
o(m * n)
o(m∗n)文章来源地址https://www.toymoban.com/news/detail-719526.html
Code
class Solution:
def shortestPath(self, grid: List[List[int]], k: int) -> int:
queue = collections.deque([(0, 0, k, 0)])
visited = {}
m, n = len(grid), len(grid[0])
while queue:
x, y, r, step = queue.popleft()
if visited.get((x, y), -1) >= r:
continue
if x == m - 1 and y == n - 1:
return step
visited[(x, y)] = r
for dz in (-1, 1):
if 0 <= x + dz < m:
if grid[x + dz][y] == 0:
queue.append((x + dz, y, r, step + 1))
elif r - 1 >= 0:
queue.append((x + dz, y, r - 1, step + 1))
if 0 <= y + dz < n:
if grid[x][y + dz] == 0:
queue.append((x, y + dz, r, step + 1))
elif r - 1 >= 0:
queue.append((x, y + dz, r - 1, step + 1))
return -1
到了这里,关于leetcode - 1293. Shortest Path in a Grid with Obstacles Elimination的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!