美文网首页
Leetcode 130. 被围绕的区域

Leetcode 130. 被围绕的区域

作者: 钢笔先生 | 来源:发表于2019-08-11 14:27 被阅读0次

    时间:2019-08-11

    题目描述

    给定一个二维的矩阵,包含 '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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/surrounded-regions
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路

    逆向思维,找那些不可被替换的元素'O',就能用DFS进行搜索了。

    代码

    class Solution:
        def solve(self, board: List[List[str]]) -> None:
            """
            Do not return anything, modify board in-place instead.
            """
            if board == None or len(board) == 0:
                return
            
            row = len(board)
            col = len(board[0])
            
            # 剪枝: 小于3行的,都有气口,没有元素被包围
            if row < 3 or col < 3:
                return
            
            for i in range(row):
                self.dfs(board, i, 0)
                self.dfs(board, i, col - 1)
            
            for j in range(col):
                self.dfs(board, 0, j)
                self.dfs(board, row - 1, j)
            
            print(board)
            
            for i in range(row):
                for j in range(col):
                    if board[i][j] == 'O':
                        board[i][j] = 'X'
                    if board[i][j] == '#':
                        board[i][j] = 'O'
            
        
        def dfs(self, board, i, j):
            if board == None:
                return
            
            row = len(board)
            col = len(board[0]) 
            if i < 0 or i >= row or j < 0 or j >= col or board[i][j] != 'O':
                return
            board[i][j] = '#'
        
            # 递归拆解:上下左右探索
            self.dfs(board, i - 1, j)
            self.dfs(board, i + 1, j)
            self.dfs(board, i, j - 1)
            self.dfs(board, i, j + 1)
    

    时空复杂度:

    时间复杂度:O(n^2)

    参考

    https://leetcode-cn.com/problems/surrounded-regions/solution/pythonshen-du-you-xian-sou-suo-jiang-jie-xi-zhi-zh/

    相关文章

      网友评论

          本文标题:Leetcode 130. 被围绕的区域

          本文链接:https://www.haomeiwen.com/subject/yvtsjctx.html