130. Surrounded Regions
Question: Surrounded Regions
Solution
想法:
- 先把沒有被 X 包圍的 O 挑出來
- O 會在 board 的外圍
- r = 0, c = 0, 1, 2, … columns - 1
- r = rows - 1, c = 0, 1, 2, …. columns - 1
- c = 0, r = 0, 1, 2,.. rows - 1
- c = columns - 1, r = 0, 1, 2, …. rows - 1
- 如果外圍有 O, dfs 往內找相鄰也為 O
- 這些 O 都先標記成 T,最後再變回 O
- O 會在 board 的外圍
- 把沒有標記成 T 的 O 都變成 X
- 把標記成 T 的都變成 O
class Solution(object): def solve(self, board): """ :type board: List[List[str]] :rtype: None Do not return anything, modify board in-place instead. """ rows, columns = len(board), len(board[0]) visited = set() def dfs(r, c): if ( r < 0 or c < 0 or r > rows - 1 or c > columns - 1 or (r, c) in visited or board[r][c] == "X" ): return visited.add((r, c)) board[r][c] = "T" dfs(r + 1, c) dfs(r - 1, c) dfs(r, c + 1) dfs(r, c - 1)
# 1. DFS capture unsurrounding regions (O -> T) for c in range(columns): if board[0][c] == "O": dfs(0, c) if board[rows - 1][c] == "O": dfs(rows - 1, c) for r in range(1, rows): if board[r][0] == "O": dfs(r, 0) if board[r][columns - 1] == "O": dfs(r, columns - 1) # 2. capture surrounding regions (O -> X) for r in range(rows): for c in range(columns): if board[r][c] == "O": board[r][c] = "X" # 3. uncapture unsurrounding regions (O -> T) elif board[r][c] == "T": board[r][c] = "O" return board

Comments
Post a Comment