Medium 542 - 01 Matrix
In this blog I will share a solution to the 01 Matrix problem.
題目連結
難度:Medium
目標:找出矩陣中每個位置到最近的 0 的距離
- 只能往上下左右移動
- 每移動一格算 1 步
- 0 到 0 的距離是 0
限制條件
- 矩陣大小:1 ~ 10^4
- 只會有 0 和 1 兩種數字
- 一定至少有一個 0
Array
BFS
Matrix
解題思路
想像你在尋找最近的出口:
- 傳統思考:從每個位置去找最近的出口
- 更好的方法:從所有出口同時向外擴散~
解題步驟
程式碼實作
程式碼說明
- 型別定義
- 初始化
- 使用
Infinity
標記未訪問的格子 - 使用
Array.from
建立二維陣列
- 使用
- BFS 實作
- 使用隊列實現廣度優先搜尋
- 每次取出一個格子,檢查其四周
- 邊界檢查
- 確保不會超出矩陣範圍
- 提高程式碼可讀性
- 距離更新
- 只有找到更短距離時才更新
- 將新位置加入隊列繼續擴散
為什麼這樣做比較適合?
- 效率比較
- 優化後的優點
- 使用
Infinity
初始化:方便判斷未訪問 - 使用
Point
型別:提高程式碼可讀性 - 使用 BFS:確保找到最短距離
- 使用
解題重點
- 反向思考:從終點(0)往回找,而不是從起點(1)開始找
- 使用 BFS 確保最短距離
- 同時從多個起點(所有的 0)開始擴散
- 善用
Infinity
來標記未訪問的點