• 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'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

    使用bfs,因为不能对边界上的连通区域填充,所以,需要提前将边界上的连通区域做特殊标记,同样调用bfs将其填充为“M”。最后在改回“O”即可。

    最后,对中间的连通区域调用bfs进行填充。

     1 class Solution(object):
     2     def bfs(self, r, c, square, t):
     3         # t == 1边缘填充, t == 0中央填充
     4         nearr = [-1,0,1,0]
     5         nearc = [0,1,0,-1]
     6         if square[r][c] != "O": return
     7         if t == 1:
     8             square[r][c] = "M"
     9         elif t == 0:
    10             square[r][c] = "X"
    11         for i in range(4):
    12             if r+nearr[i] >= 0 and  r+nearr[i] < len(square) and c+nearc[i] >= 0 and c+nearc[i]<len(square[0]):
    13                 self.bfs(r+nearr[i], c+nearc[i], square, t)
    14     def solve(self, board):
    15         """
    16         :type board: List[List[str]]
    17         :rtype: void Do not return anything, modify board in-place instead.
    18         """
    19         if board == []: return
    20         elif board[0] == []: return
    21         
    22         # 首先,将边缘的O进行标记,标记为M
    23         for i in range(len(board[0])):
    24             if board[0][i] == "O":
    25                 self.bfs(0, i, board, 1)
    26         for i in range(len(board[0])):
    27             if board[len(board)-1][i] == "O":
    28                 self.bfs(len(board)-1, i, board, 1)
    29         for i in range(len(board)):
    30             if board[i][0] == "O":
    31                 self.bfs(i, 0, board, 1)
    32         for i in range(len(board)):
    33             if board[i][len(board[0])-1] == "O":
    34                 self.bfs(i, len(board[0])-1, board, 1)
    35 
    36         # 检查中间的连通区域
    37         for i in range(0, len(board)):
    38             for j in range(0, len(board[0])):
    39                 if board[i][j] == "O":
    40                     self.bfs(i, j, board, 0)
    41 
    42         for i in range(len(board)):
    43             for j in range(len(board[0])):
    44                 if board[i][j] == "M":
    45                     board[i][j] = "O"
  • 相关阅读:
    php 获取机器名
    php缓存参数祥解
    ajax参数祥解
    php 正则匹配返回字符串
    TP5验证规则使用
    J
    j
    virtualBox 桥接网卡 未指定
    Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解
    Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
  • 原文地址:https://www.cnblogs.com/yxh-amysear/p/9655314.html
Copyright © 2020-2023  润新知