LeetCode-130、被围绕的区域-中等

LeetCode-130、被围绕的区域-中等

给定一个二维的矩阵,包含 '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'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

代码:

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]:
            return
        row = len(board)
        col = len(board[0])
        def func(x, y):
            if board[x][y] == 'O':
                board[x][y] = 'S'
                stack = [(x-1, y), (x+1, y), (x, y-1), (x, y+1)]
                for (i, j) in stack:
                    if if row > i >= 0 and col > j >=0::
                        func(i, j)
            return
        for b in range(col):
            func(0, b)
        for b in range(1, col-1):
            func(row-1, b)
        for a in range(1, row):
            func(a, 0)
            func(a, col-1)
        for i in range(row):
            for j in range(col):
                if board[i][j] == 'O':
                    board[i][j] = 'X'
                if board[i][j] == 'S':
                    board[i][j] = 'O' 
        return

发布了209 篇原创文章 · 获赞 48 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/clover_my/article/details/104762695