【leetcode】130. 被围绕的区域

文章目录

题目

130. 被围绕的区域

给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' 组成,捕获 所有 被围绕的区域:

连接:一个单元格与水平或垂直方向上相邻的单元格连接。

区域:连接所有 'O' 的单元格来形成一个区域。

围绕:如果您可以用 'X' 单元格 连接这个区域,并且区域中没有任何单元格位于 board 边缘,则该区域被 'X' 单元格围绕。

通过 原地 将输入矩阵中的所有 'O' 替换为 'X' 来 捕获被围绕的区域。你不需要返回任何值。

题解

  1. 从边界出发进行遍历,如果遇到'O',则进行标记
  2. 然后对未标记的'O'变为'X'
python 复制代码
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 0

        n = 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':
                return
            
            board[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'
        
相关推荐
A_nanda2 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程
代码雕刻家4 小时前
2.4.蓝桥杯-分巧克力
算法·蓝桥杯
Ulyanov4 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
智者知已应修善业6 小时前
【查找字符最大下标以*符号分割以**结束】2024-12-24
c语言·c++·经验分享·笔记·算法
91刘仁德6 小时前
c++类和对象(下)
c语言·jvm·c++·经验分享·笔记·算法
diediedei6 小时前
模板编译期类型检查
开发语言·c++·算法
阿杰学AI6 小时前
AI核心知识78——大语言模型之CLM(简洁且通俗易懂版)
人工智能·算法·ai·语言模型·rag·clm·语境化语言模型
mmz12076 小时前
分治算法(c++)
c++·算法
睡一觉就好了。7 小时前
快速排序——霍尔排序,前后指针排序,非递归排序
数据结构·算法·排序算法
Tansmjs7 小时前
C++编译期数据结构
开发语言·c++·算法