130. Surrounded Regions 被围绕的区域
生活随笔
收集整理的這篇文章主要介紹了
130. Surrounded Regions 被围绕的区域
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個二維的矩陣,包含 ‘X’ 和 ‘O’(字母 O)。
找到所有被 ‘X’ 圍繞的區域,并將這些區域里所有的 ‘O’ 用 ‘X’ 填充。
示例:
X X X X X O O X X X O X X O X X運行你的函數后,矩陣變為:
X X X X X X X X X X X X X O X X解釋:
被圍繞的區間不會存在于邊界上,換句話說,任何邊界上的 ‘O’ 都不會被填充為 ‘X’。 任何不在邊界上,或不與邊界上的 ‘O’ 相連的 ‘O’ 最終都會被填充為 ‘X’。如果兩個元素在水平或垂直方向相鄰,則稱它們是“相連”的。
DFS
所有的不被包圍的 O 都直接或間接與邊界上的 O 相連。
- 對于每一個邊界上的 O,我們以它為起點,標記所有與它直接或間接相連的字母 O;
- 最后我們遍歷這個矩陣,對于每一個字母:
- 如果該字母被標記過,則該字母為沒有被字母 X 包圍的字母 O,我們將其還原為字母 O;
- 如果該字母沒有被標記過,則該字母為被字母 X 包圍的字母 O,我們將其修改為字母 X。
Code
def solve(self, board: List[List[str]]) -> None:"""Do not return anything, modify board in-place instead."""if not board:returndef dfs(x, y):if not 0 <= x < rows or not 0 <= y < cols or board[x][y] != 'O':returnboard[x][y] = 'V'dfs(x + 1, y)dfs(x - 1, y)dfs(x, y + 1)dfs(x, y - 1)rows, cols = len(board), len(board[0])for r in range(rows):dfs(r, 0)dfs(r, cols - 1)for c in range(1, cols - 1):dfs(0, c)dfs(rows - 1, c)for r in range(rows):for c in range(cols):if board[r][c] == 'V':board[r][c] = 'O'elif board[r][c] == 'O':board[r][c] = 'X'復雜度分析
-
時間復雜度:O(n×m)O(n \times m)O(n×m),其中 nnn 和 mmm 分別為矩陣的行數和列數。深度優先搜索過程中,每一個點至多只會被標記一次。
-
空間復雜度:O(n×m)O(n \times m)O(n×m),其中 nnn 和 mmm 分別為矩陣的行數和列數。主要為深度優先搜索的棧的開銷。
總結
以上是生活随笔為你收集整理的130. Surrounded Regions 被围绕的区域的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020\Simulation_1\5.
- 下一篇: 2020\Simulation_1\6.