【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)
相关推荐
Felven10 分钟前
B. Skibidus and Ohio
算法
yonuyeung16 分钟前
代码随想录算法【Day54】
java·数据结构·算法
敲上瘾22 分钟前
基础dp——动态规划
java·数据结构·c++·python·算法·线性回归·动态规划
西猫雷婶40 分钟前
python学智能算法(三)|模拟退火算法:深层分析
算法·机器学习·模拟退火算法
张有志_1 小时前
STL容器终极解剖:C++ vector源码级实现指南 | 从内存分配到异常安全的全流程避坑
c语言·c++·算法·开源·visual studio
mvufi1 小时前
day58 第十一章:图论part08
数据结构·算法·图论
williamzhou_20132 小时前
深搜专题2:组合问题
数据结构·算法
web_155342746563 小时前
性能巅峰对决:Rust vs C++ —— 速度、安全与权衡的艺术
c++·算法·rust
计算机小白一个9 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
万事可爱^10 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan