【LeetCode 130. 被围绕的区域】

1. 题目

2. 分析

这题其实非常不错。如果正向解,非常麻烦;因为很难界定哪些O是被包围的?但是如果反向解呢?因为边界的O不会被包围,那么就可以想到跟边界O相连的O都不会被包围。那么除此之外的O都会被包围,题目就解决了。

3. 代码

python 复制代码
class Solution:
    def solve(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        m, n = len(board), len(board[0])
        vis = [[0] * n for i in range(m)]
        
        # 只从边界遍历
        for i in [0,m-1]:
            for j in range(n):
                if board[i][j] == 'O':                
                    self.dfs(i, j, m, n, vis, board)
        for j in [0, n-1]:
            for i in range(m):
                if board[i][j] == 'O':                
                    self.dfs(i, j, m, n, vis, board)

        print(vis)
        for i in range(m):
            for j in range(n):
                if vis[i][j] == 0:
                    board[i][j] = 'X'
            
    def dfs(self, i, j, m, n, vis, board):
        if i>=0 and j>=0 and i<m and j< n:
            if vis[i][j] == 0 and board[i][j] == "O":
                vis[i][j] = 1
                for item in [(i-1,j), (i, j-1), (i+1, j), (i, j+1)]:
                    new_i, new_j = item
                    self.dfs(new_i, new_j, m, n, vis, board)
相关推荐
青 春 记 忆8 小时前
LeetCode 53. 最大子数组和|Python 解法详解
python·算法·leetcode
豆瓣鸡9 小时前
算法日记 - Day10
算法
戴西软件9 小时前
戴西CAxWorks.VPG车辆工程仿真软件技术解析(上)——安全仿真体系的自动化构建
运维·网络·数据库·人工智能·算法·安全·自动化
zander2589 小时前
4. 寻找两个正序数组的中位数:用分割点代替合并
数据结构·算法
Kisorge9 小时前
【电机控制器】 基于STSPIN32G4的FOC控制
stm32·嵌入式硬件·算法
Elivs9 小时前
RMSNorm函数
人工智能·算法·机器学习
tudousisi22210 小时前
P4447 [AHOI2018初中组] 分组 题解复盘
算法
SNAKEpc1213810 小时前
OpenGL(十一)- 变换管线
c语言·c++·算法·矩阵·图形渲染
饼饼学习空间智能12 小时前
遥操作数据能否提升机器人自主化水平?详解模仿学习、仿真放大与Sim2Real闭环
人工智能·算法
间歇性努力持续性发呆的野生快乐选手12 小时前
dfs回溯,bfs枚举,完全背包
c++·算法·深度优先·宽度优先