Easy 733. Flood Fill
In this blog I will share a solution to the Flood Fill problem.
題目連結
難度:Easy
給定一個二維整數陣列
image
代表一張圖片,其中每個像素都有一個整數值。同時給定起始位置的座標 (sr, sc)
和新的顏色值 color
,使用類似 MS Paint 的 Flood Fill 演算法來填充圖片。從起始像素開始,包含上下左右相連且顏色相同的像素都要被填充成新的顏色。Example 1:限制
- image.length 和 image0.length 在範圍 1, 50 內
- 0 <= image[i]j, color <= 2^16 - 1
Array
Depth-First Search
Breadth-First Search
解題思路
這題是經典的 Flood Fill 演算法,就像繪圖軟體中的「油漆桶」工具:
- 起點檢查
- 如果起點的顏色已經是目標顏色,直接返回
- 記錄原始顏色,以便後續比對
- 深度優先搜尋 (DFS)
- 從起點開始,檢查四個方向
- 如果相鄰像素顏色相同,就遞迴填充
- 每填充一個像素就改變其顏色
狀態機設計
程式碼實作
狀態說明
- Start: 初始狀態
- 檢查起始條件
- 準備開始填充
- CheckPixel: 檢查像素
- 檢查座標是否有效
- 檢查顏色是否相同
- Fill: 填充狀態
- 將當前像素改為新顏色
- 準備探索相鄰像素
- Explore: 探索狀態
- 檢查上下左右四個方向
- 對每個有效方向進行遞迴
解題心得
- DFS 的應用
- 使用遞迴實現深度優先搜尋
- 需要注意邊界條件
- 避免重複處理同一像素
- 效能考量
- 時間複雜度:O(n),其中 n 是圖片中的像素數量
- 空間複雜度:O(n),最壞情況下的遞迴深度
- 實務應用
- 圖形編輯軟體的填充工具
- 遊戲中的區域填充
- 圖像處理中的區域標記
::