LeetCode 79 - Word Search 解題筆記
🏷️ 題目基本資訊
- 題目名稱: Word Search
- 題號編號: 79
- 難度:Medium
- 題目分類: Backtrack
- 連結:LeetCode 題目連結
🧠 題目目標
給定一個 m x n
的字母矩陣 board
和一個字串 word
,判斷 word
是否存在於矩陣中。
- 單字可以從任一格開始搜尋
- 每步只能向上下左右移動到相鄰的格子
- 每個格子只能用一次
🔍 解題邏輯與步驟
- 逐格嘗試:對每個 cell 嘗試是否可以從這裡開始找
word
。 - 深度優先搜尋(DFS):一旦找到起點就向四周延伸比對字串。
- 邊界與狀態判斷:
- 越界直接回傳
false
- 若字母不符合當前字元,回傳
false
- 越界直接回傳
- 記錄已訪位置:將走過的格子暫時設為
'#'
,防止重複走訪。 - 成功條件:當
index === word.length
,代表整個字串已比對完成。 - 回溯(backtracking):走錯時要還原格子內容,讓其他路徑可用。
💡 程式邏輯簡略圖(Pseudocode)
1 | exist(board, word): |
1 | dfs(i, j, index): |
✨ 重點技巧
使用 DFS 遞迴逐步檢查字母是否匹配
每次遞迴都傳入 index + 1,表示比對下一個字元
回溯還原(board[i][j] = temp)是 DFS 成敗與否的關鍵
以 # 作為標記代表此格已被使用
時間與空間複雜度分析
時間複雜度:最壞情況為 O(m _ n _ 3^L)
(m × n 為起點總數,L 為 word.length,每格最多往 3 個方向擴展)
空間複雜度:O(L) 為遞迴深度