力扣中國 · #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'