敘述
這是 Algorithm I
的第九天第二個題目,總共有兩題。
- 難度:
Medium
- 花費時間: 2 hr
- 題目
給你一個 MxN Matrix
grid
,裡面包含了空盒子,新鮮的橘子,腐爛的橘子。
若每過一天每個腐爛的橘子都會腐爛他上下左右的新鮮橘子,
則至少要過幾天所有的橘子才會被腐爛。
- 0: 空盒子
- 1: 新鮮的橘子
- 2: 腐爛的橘子
橘子只能透過橘子傳遞腐爛,空盒子是不行的。
如果有橘子腐爛不到,那麼回傳 -1
代表永遠不會腐爛。
回傳最少需要幾天才會腐爛完成。
點我開啟限制與範例
限制:
m == grid.length
n == grid[i].length
1 <= m, n <= 10
grid[i][j]
is0
,1
, or2
.
Example 1:
1 | Input: grid = [[2,1,1],[1,1,0],[0,1,1]] |
Example 2:
1 | Input: grid = [[2,1,1],[0,1,1],[1,0,1]] |
Example 3:
1 | Input: grid = [[0,2]] |
點我開啟思路
思路
bfs 解法
- 遍歷陣列
- 把 1 改成 -1
- 把 2 改成 -2
- 遍歷陣列
- 遇到 -2 就進入 bfs 函式
- 遍歷陣列
- 如果還有 -1 就回傳 false
- 回傳最大值
bfs 函式
- bfs 找上下左右
- 如果是 -2 就直接改現在的大小
- 如果不是 -2 就比大小,取最小的
- 假設最小的是他現在的值,就不繼續往下找
- 假設最小的是 root 現在走到的值,就繼續找
筆記
BFS 更新走的步數到 Matrix
裡
- 對每個腐爛的橘子做 BFS ,從腐爛的那顆開始往外擴散,每走完一圈都把腐爛到的橘子記上腐爛的輪數。
- 遍歷陣列
- 找到
Matrix
裡腐爛輪數最大的橘子,回傳輪數 - 或是找到還沒腐爛的,回傳 -1 代表沒有腐爛完全
- 找到
範例
// 傳入值 |
TypeScript 實做:
1 | function orangesRotting(grid: number[][]): number { |