【leetcode】130. 被围绕的区域
文章目录
- 题目
- 题解
题目
130. 被围绕的区域
给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ 组成,捕获 所有 被围绕的区域:
连接:一个单元格与水平或垂直方向上相邻的单元格连接。
区域:连接所有 ‘O’ 的单元格来形成一个区域。
围绕:如果您可以用 ‘X’ 单元格 连接这个区域,并且区域中没有任何单元格位于 board 边缘,则该区域被 ‘X’ 单元格围绕。
通过 原地 将输入矩阵中的所有 ‘O’ 替换为 ‘X’ 来 捕获被围绕的区域。你不需要返回任何值。
题解
- 从边界出发进行遍历,如果遇到‘O’,则进行标记
- 然后对未标记的‘O’变为‘X’
class Solution(object):def solve(self, board):""":type board: List[List[str]]:rtype: None Do not return anything, modify board in-place instead."""if not board:return 0n = len(board[0])m = len(board)def dfs(x, y):if not 0 <= x < m or not 0 <= y < n or board[x][y] != 'O':returnboard[x][y] = 'A'dfs(x - 1, y)dfs(x, y - 1)dfs(x + 1, y)dfs(x, y + 1)for i in range(m):dfs(i, 0)dfs(i, n - 1)for j in range(n):dfs(0, j)dfs(m - 1, j)for i in range(m):for j in range(n):if board[i][j] == 'A':board[i][j] = 'O'elif board[i][j] == 'O':board[i][j] = 'X'