Leetcode 130.被围绕的区域(Surrounded Regions)

Leetcode 130.被围绕的区域

1 题目描述(Leetcode题目链接

  给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。

X X X X
X O O X
X X O X
X O X X

运行你的函数后,矩阵变为:

X X X X
X X X X
X X X X
X O X X

解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

2 题解

  深度优先搜索,首先将所有与边界O相连的O置为C。再遍历一次把所有C改成O,所有O改成X。

class Solution:
    def solve(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        if not board:
            return
        m, n = len(board), len(board[0])
        def dfs(i, j):
            if i < 0 or i == m or j < 0 or j == n or board[i][j] != 'O':
                return
            board[i][j] = 'C'
            dfs(i+1, j)
            dfs(i-1, j)
            dfs(i, j+1)
            dfs(i, j-1)

        for i in range(m):
            for j in range(n):
                if board[i][j] == 'O' and (i == 0 or j == 0 or i == m - 1 or j == n - 1):
                    dfs(i, j)
        for i in range(m):
            for j in range(n):
                if board[i][j] == 'C':
                    board[i][j] = 'O'
                elif board[i][j] == 'O':
                    board[i][j] = 'X'
发布了264 篇原创文章 · 获赞 63 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_39378221/article/details/105006493
今日推荐