130. 被围绕的区域 - 力扣(LeetCode)
class Solution:def solve(self, board: List[List[str]]) -> None:"""Do not return anything, modify board in-place instead."""if not board or not board[0]:returnrows, cols = len(board), len(board[0])def dfs(r, c):if r < 0 or c < 0 or r >= rows or c >= cols or board[r][c] != 'O':returnboard[r][c] = '#' # 标记与边界相连的 'O'dfs(r + 1, c) # 下dfs(r - 1, c) # 上dfs(r, c + 1) # 右dfs(r, c - 1) # 左# 1. 遍历边界,标记所有与边界相连的 'O'for i in range(rows):if board[i][0] == 'O':dfs(i, 0)if board[i][cols - 1] == 'O':dfs(i, cols - 1)for j in range(cols):if board[0][j] == 'O':dfs(0, j)if board[rows - 1][j] == 'O':dfs(rows - 1, j)# 2. 遍历整个矩阵,将 'O' 变为 'X','#' 变回 'O'for i in range(rows):for j in range(cols):if board[i][j] == 'O':board[i][j] = 'X'elif board[i][j] == '#':board[i][j] = 'O'