【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)
相关推荐
艾为电子16 分钟前
【应用方案】电视沉浸式音频升级: 电视音频 awinic“芯片 + 算法” 一体化解决方案
算法·音视频
大熊背30 分钟前
树莓派相机自动白平衡详解(二)
算法·白平衡·isppipeline
Scabbards_1 小时前
面试Leetcode - 算法合集
算法·leetcode·面试
chuan.bai1 小时前
Java RAG 实战附录:qwen3 与 bge-m3 模型切换指南
java·人工智能·算法
wuyk5551 小时前
7.AVL 树:第一个自平衡二叉搜索树
开发语言·stm32·单片机·算法
程序猿炎义1 小时前
【llm-algo-leetcode学习笔记】显存与性能认知底座
笔记·学习·leetcode
rannn_1111 小时前
【力扣hot100】二叉树专题+总结
java·算法·leetcode·二叉树
啊嘞嘞?1 小时前
力扣(岛屿数量)
算法·leetcode
zander2581 小时前
LeetCode 198. 打家劫舍
算法·leetcode·深度优先
吃着火锅x唱着歌1 小时前
LeetCode 648.单词替换
算法·leetcode·职场和发展