1. 程式人生 > 實用技巧 >Leetcode733.影象渲染

Leetcode733.影象渲染

題意

給定一個二維陣列和初始座標,要求從上下左右四個方向進行擴充套件,如果當前擴充套件的格子的顏色不等於初始座標的顏色,那麼就進行更改

思路

  • 1️⃣四個方向擴充套件很自然地想到了廣度優先搜尋BFS,佇列中儲存座標,每當取出一個座標就往上下左右四個方向上進行擴充套件,並對擴充套件的座標進行如下判斷:是否越界——>是否不等於初始座標的顏色,通過判斷之後就修改並將節點入隊。最後佇列中沒有佇列就表示處理完。

  • 2⃣️另一個想法是用深度優先搜尋DFS,同樣是往四個方向上進行擴充套件,關於是否滿足修改的條件可以在要進入下一層遞迴函式的時候就進行判斷。

  • 注意⚠️

    • 如果起點的顏色就和目標顏色一樣,就可以直接返回。

      第一次提交發現了一個死迴圈。因為一開始我是直接對擴充套件的狀態進行修改然後入隊,那麼如果要修改的顏色和起點顏色一樣,那麼就會出現重複入隊重複處理的死迴圈(如下所示⬇️)。➡️於是就開了一個vis陣列來標誌節點是否已經修改過。雖然過了,但是效率表現不佳。看了題解發現只要一開始判斷顏色一致就可以返回了