130 被包围的区域

LeetCode130被包围的区域 题目:被围绕的区域 难度 中等 题目描述: 给定一个二维的矩阵,包含 ‘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’不会位于边界上,那么我们设立一个标记数组protect,从边界开始BFS或者DFS,与边界上的’O’相连的内部’O’都protect起来。
之后,再去遍历矩阵内部,未被保护的’O’均修改成’X’即可.
注意输入为空时的处理。

class Solution {
    int row, col;
    int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
    vector<vector<int>> protect;

public:
    void BFS(int i, int j, vector<vector<char>>& board)
    {
        queue<pair<int, int>> q;
        q.push(make_pair(i, j));
        // 从边界开始,按照代码逻辑,边界没必要保护
        while(!q.empty())
        {
            auto next = q.front();
            q.pop();
            for(int i = 0; i < 4; ++i)
            {
                int I = next.first + dx[i], J = next.second + dy[i];
                // 满足边界条件,且是O,且还未被保护
                if(I >= 1 && I < row - 1 && J >= 1 && J < col - 1 && board[I][J] == 'O' && !protect[I][J])
                {
                    q.push(make_pair(I, J));
                    protect[I][J] = 1;
                }
            }
        }
    }   

    void solve(vector<vector<char>>& board) {
        if(!board.size()) return;
        row = board.size(), col = board[0].size();
        protect.resize(row);
        for(int i = 0; i < row; ++i) 
        {
            protect[i].resize(col);
            fill(protect[i].begin(), protect[i].end(), 0);
        }
        // 先处理边界BFS
        for(int i: {0, row  - 1}) // 上下边界
            for(int j = 0; j < col; ++j)
            {
                if(board[i][j] == 'O') BFS(i , j, board);
            }
        for(int j:{0, col - 1})
            for(int i = 0; i < row; ++i)
            {
                if(board[i][j] == 'O') BFS(i , j, board);
            }
        for(int i = 1; i < row - 1; ++i)
            for(int j = 1; j < col - 1; ++j)
                if(board[i][j] == 'O' && !protect[i][j]) // 到这里在内层且未被保护的'O'要被修改
                    board[i][j] = 'X';
    }
};
华为od 面试八股文_测试/测试开发_01_含答案 华为od面试八股文_测试/测试开发_01_含答案 阅读详情

相关推荐

SDRAM控制器——添加读写FIFO

用FIFO实现数据缓存

H19981118的博客 2626

【LeetCode-130】130.被包围的区域

被包围的区域 题目描述 给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。 找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 解释: 被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。 方法 一:dfs+递归 class Solution { public void solve(cha

weixin_42956047的博客 460

轴承寿命预测实战:手把手教你用IEEE PHM2012数据集训练模型(附Python代码)

本文详细介绍了如何利用IEEE PHM2012数据集构建轴承剩余寿命预测模型,从数据预处理、特征工程到LSTM模型训练与部署,提供了完整的Python代码实现。通过实战案例,帮助读者掌握预测性维护中的关键技术,提升工业设备的运行安全与效率。

weixin_29186249的博客 311

LeetCode-130-被围绕的区域

我们可以使用深度优先遍历来查找当前节点附近的节点从而判断是否被包围。考虑到我们需要找出被围绕的区域,因此我们只需要在矩阵的四条边上找出对应O延申产生的区域令其保持为O,而剩余区域则可以全部赋值为X。为了区分两种不同的O,我们可以先将最终保持为O的区域修改为R。最终我们从四条边上的O节点开始进行深度有点遍历,将遍历到的节点赋值为R。最终我们只需要再遍历一次矩阵,将所有R修改为O,所有O修改为X即可。

L.Wzz的博客 243

Ubuntu 22.04 安装 IsaacLab 2.1.0

本文介绍了IsaacLab的完整安装流程:1)创建Python3.10虚拟环境;2)安装PyTorch2.5.1(CUDA11.8);3)升级pip并安装IsaacSim4.5.0;4)克隆IsaacLab仓库;5)运行安装脚本(需接受EULA)。若遇cmake缺失错误,需执行sudo apt安装。安装完成后可通过Ant-v0训练任务验证,成功运行后将显示IsaacSim窗口和训练完成提示。注意:IsaacSim不同版本可共存于不同环境。

weixin_47880303的博客 2223

告别命令行恐惧!用nTopology可视化工具5分钟搞定三维Voronoi泡沫建模

本文介绍如何利用nTopology可视化工具快速生成三维Voronoi泡沫结构,无需编程即可完成复杂建模。Voronoi结构在轻量化设计、能量吸收和生物医学等领域具有重要应用,传统命令行方法门槛较高。通过nTopology的四步流程,用户可在5分钟内创建仿真就绪模型,大幅提升设计效率。

weixin_30764771的博客 426

LeetCode:130. 被围绕的区域

130. 被围绕的区域 给定一个二维的矩阵,包含'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'最终都会被填充...

梦~' 329

【AI 智能体】Windows 环境 Hermes Agent(爱马仕)安装详细过程

Windows 环境 Hermes Agent(爱马仕)安装详细过程

congge_study的博客 1828

leetcode130:被围绕的区域(C++)

题目描述: 给定一个二维的矩阵,包含 ‘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’ 都不会被填充...

weixin_42947653的博客 697

使用Simulink进行四足机器人的非线性动力学建模与仿真

四足机器人的运动包含多个自由度(DOF),包括腿部的摆动和支撑阶段的动力学特性。由于存在接触力、摩擦以及不同地形的影响,四足机器人的动力学行为呈现出高度的非线性特征。因此,构建准确的非线性动力学模型对于研究机器人的运动学和动力学特性至关重要。定义代表机器人状态的变量,如位置、速度、角度和角速度。matlab深色版本通过本指南,我们介绍了如何基于Simulink搭建一个四足机器人的非线性动力学模型,并进行了详细分析。

xiaoheshang_123的博客 311

蓝牙学习笔记之HCI协议(一)

目录 协议浅述 HCI简介 HCI协议数据格式 HCI Command Packet HCI ACL Data Packet HCI Synchronous(SCO) Data Packet HCI Event Packet HCI命令和事件介绍 Inquiry command Write Local Name Command Read BD_ADDR Command H...

在云巅的博客 2万+

Leetcode---130. 被围绕的区域---每日一题---DFS

130. 被围绕的区域 给定一个二维的矩阵,包含 ‘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

Ashen的博客 338

cartographer如何使用2个反光柱子作为一个landmark

2个反光柱的摆放要求:靠着墙摆,因为我们只能从一侧看到2个反光柱,从两侧都看到至少需要3个反光柱来定位。 landmark检测原理:因为我们是从一侧看到2个反光柱,所以看到2个反光柱在一帧激光数据中会有顺序,有2种情形,如下图 这两种情形,我们发现 情形1: 这种情形2个反光柱子被检测到的激光角度小于180,我们认为大一些激光角度的是原点。 情形2: 这种情形2个反光柱子被检测到的激光角度大于180,我们认为小一些激光角度的是原点。 这样原点就固定下来,并是唯一的。2个反光柱构成的坐标系也就确定了。和激光坐

南北粉面馆 3827

leetcode 130.被包围的区域

leetcode 130.被包围的区域 给定一个二维的矩阵,包含 ‘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’ 最终都会被填充

玛软的垃圾桶 413

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Leetcode】130.被包围的区域

题目 给定一个二维的矩阵,包含 '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' 都...

weixin_33826609的博客 368

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

130.被包围的区域python实现

**题目描述:**给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 解题思路: 参考别人的思路,用dfs写了以下代码,遇到了一些坑。。 class Solution(object): def solve(self, board): """ :type board: List[List[str]] :rtype: None Do not return anythi

kyy1997的博客 799

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LeetCode130:被包围的区域

https://leetcode.com/problems/surrounded-regions/ 问题描述 Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A region is captured by flipping all 'O's into 'X's in that surrounded region. Example: X X X X X O

一面之媛 193

leetcode 130.Surrounded Regions(包围区域)

Given a 2D board containing ‘X’ and ‘O’ (the letter O), capture all regions surrounded by ‘X’. A region is captured by flipping all 'O’s into 'X’s in that surrounded region. Example: X X X X X O O X X...

蓝羽飞鸟的博客 289

LeetCode130 Surrounded Regions 包围区域

Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A region is captured by flipping all 'O's into 'X's in that surrounded region. Example: X X X X X O O...

李歇特冯-兹拜因巴哈的博客 291

DFS--被包围的区域130

有一个矩阵,其中有x,被x包围的o,没有被x包围的o,要求把所有x包围的o变成x。 则有个相当巧妙的方法是先从边界的o开始dfs,将所有与边界相连或者间接相连的o变成q,最后遍历整个矩阵,所有的o都是不被包围的。 class Solution { int rows; int cols; int[][] s={{1,0},{-1,0},{0,1},{0,-1}}; public void solve(char[][] board) { if(board.leng

weixin_47040809的博客 188

LeetCode刷题日志-130.被包围的区域

根据这一发现,我们只要搜索每一个区域,判断它是否包含边界的。完当前的位置后,我们可以知道当前位置区域是否包含边界的。根据以上分析,我们可以遍历整个二维数组,每当遇到一个。,如果包含我们不对该区域进行填充,如果不包含,再调用。依题意,只要某个区域包含边界的。,同时判断是否包含边界的。那么这个区域就不能被。

qq_43514707的博客 316

解题思路-leetcode130题:被围绕的区域

解题思路-leetcode130题:被围绕的区域 题目描述: 给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例 1: 输入:board = [[“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”,

PPlemoin123的博客 1306

LeetCode 130. Surrounded Regions(包围区域)

原题网址:https://leetcode.com/problems/surrounded-regions/ Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured by flipping all 'O's into 'X's i

James Pan 607

LeetCode-130.被包围的区域、广度优先搜索

来源:力扣(LeetCode)第130题 BFS 算法 广度优先搜索(BFS)的本质就是从源点出发,按层顺序进行遍历,把每一层的所有节点访问完后再转到下一层; 使用队列(queue)来记录将要访问的点,访问完每个点就出队,然后把它的邻近点入队; 同时要记录哪些点被访问过以避免重复访问。 对边界上的 O 进行 BFS 搜索,从而标记所有和边界相连的 O,然后再进行替换即可 题目分析 因为边界以及和边界相连的 O 不能被替换,可以对所有边界上的 O 进行广度优先搜索找到所有与其相连的 O 并做标记即可。 ..

编程猿来如此 396

130. Surrounded Regions -- 被某字符包围的区域

Given a 2D board containing'X'and'O', capture all regions surrounded by'X'. A region is captured by flipping all'O's into'X's in that surrounded region. For example, X X X X X O O X X X O X...

weixin_30559481的博客 102

剑指 Offer 43. 1~n整数中1出现的次数 &130.被包围的区域

剑指 Offer 43. 1~n整数中1出现的次数题目分析代码 题目 输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。 例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。 示例 1: 输入:n = 12 输出:5 示例 2: 输入:n = 13 输出:6 限制: 1 <= n < 2^31 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu

qq_43688155的博客 337
上一篇: 面试题55 平衡二叉树
下一篇: 1202 字符串中的元素
UnendingGlory
博客等级 码龄9年 55粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值