力扣中國 · #130
被圍繞的區域
使用 DFS 標記邊界相連區域
開啟原題 ↗時間複雜度O(mn)
空間複雜度O(mn)
解釋模型qwen/qwen3.8-27b
解題思路
作者很懶,所以我請 qwen/qwen3.8-27b 來幫他解釋。
從邊界上的 ‘O’ 出發進行 DFS,將與邊界相連的區域標記為 ‘A’,最後將剩餘的 ‘O’ 轉為 ‘X’,並恢復 ‘A’ 為 ‘O’。
通過的程式碼
class Solution:
def solve(self, board: List[List[str]]) -> None:
"""
Do not return anything, modify board in-place instead.
"""
m = len(board)
n = len(board[0])
direc=[
(0, 1),
(1, 0),
(-1, 0),
(0, -1),
]
def dfs(x, y):
nonlocal board
board[x][y] = 'A'
for a, b in direc:
if 0 <= x+a < m and 0 <= y+b < n and board[x+a][y+b] == 'O':
dfs(x+a, y+b)
for i in range(m):
if board[i][0] == 'O':
dfs(i, 0)
if board[i][n-1] == 'O':
dfs(i, n-1)
for i in range(n):
if board[0][i] == 'O':
dfs(0, i)
if board[m-1][i] == 'O':
dfs(m-1, i)
for i in range(m):
for j in range(n):
if board[i][j] == 'O':
board[i][j] = 'X'
if board[i][j] == 'A':
board[i][j] = 'O'