Leetcode刷题详解——被围绕的区域

news2024/11/30 14:45:31

1. 题目链接:130. 被围绕的区域

2. 题目描述:

给你一个 m x n 的矩阵 board ,由若干字符 'X''O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O''X' 填充。

示例 1:

img

输入: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","X"],["X","O","X","X"]]
解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

示例 2:

输入:board = [["X"]]
输出:[["X"]]

提示:

  • m == board.length
  • n == board[i].length
  • 1 <= m, n <= 200
  • board[i][j]'X''O'

3. 解法(递归):

3.1 算法思路:

正难则反

可以先利用dfs将与边缘相连的 0区域做上标记,然后重新遍历矩阵,将没有标记为 .修改成X即可

  1. 定义四个方向的横坐标偏移量(dx)和纵坐标偏移量(dy),用于在二维矩阵中进行上下左右相邻元素的访问。
  2. 获取矩阵的行数(m)和列数(n)
  3. 遍历第一行和最后一行的元素,如果某个元素为O,则从该点开始进行深度优先搜索,将其标记为已访问。
  4. 遍历第一列和最后一列的元素,如果某个元素为O,则从该点开始进行深度优先搜索,将其标记为已访问。
  5. 再次遍历整个矩阵,对于每个元素:
    • 如果当前元素为 .,则将其修改为O
    • 如果当前元素为O,则将其修改为X
  6. 返回修改后的矩阵,其中O表示未被水淹没的岛屿,X表示已被水淹没的岛屿。

请添加图片描述

3.2 C++算法代码:

class Solution {
    int dx[4] = {1, -1, 0, 0}; // 定义四个方向的横坐标偏移量
    int dy[4] = {0, 0, 1, -1}; // 定义四个方向的纵坐标偏移量
    int m, n; // 定义矩阵的行数和列数

public:
    void solve(vector<vector<char>>& board) {
        m = board.size(), n = board[0].size(); // 获取矩阵的行数和列数
        for (int j = 0; j < n; j++) {
            if (board[0][j] == 'O') dfs(board, 0, j); // 如果第一行的某个元素为'O',则从该点开始进行深度优先搜索
            if (board[m - 1][j] == 'O') dfs(board, m - 1, j); // 如果最后一行的第一个元素为'O',则从该点开始进行深度优先搜索
        }
        for (int i = 0; i < m; i++) {
            if (board[i][0] == 'O') dfs(board, i, 0); // 如果第一列的第一个元素为'O',则从该点开始进行深度优先搜索
            if (board[i][n - 1] == 'O') dfs(board, i, n - 1); // 如果最后一列的第一个元素为'O',则从该点开始进行深度优先搜索
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (board[i][j] == '.') board[i][j] = 'O'; // 如果当前元素为'.',则将其修改为'O'
                else if (board[i][j] == 'O') board[i][j] = 'X'; // 如果当前元素为'O',则将其修改为'X'
            }
        }
    }

    void dfs(vector<vector<char>>& board, int i, int j) {
        board[i][j] = '.'; // 将当前元素修改为'.'
        for (int k = 0; k < 4; k++) {
            int x = i + dx[k], y = j + dy[k]; // 计算下一个元素的坐标
            if (x >= 0 && x < m && y >= 0 && y < n && board[x][y] == 'O') {
                dfs(board, x, y); // 如果下一个元素为'O',则继续进行深度优先搜索
            }
        }
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1215490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

漏洞分析 | 漏洞调试的捷径:精简代码加速分析与利用

0x01前言 近期&#xff0c;Microsoft威胁情报团队曝光了DEV-0950&#xff08;Lace Tempest&#xff09;组织利用SysAid的事件。随后&#xff0c;SysAid安全团队迅速启动了应急响应&#xff0c;以应对该组织的攻击手法。然而&#xff0c;在对漏洞的分析和复现过程中&#xff0c…

rabbitmq 集群搭建

RabbitMQ集群介绍 RabbitMQ集群是一组RabbitMQ节点&#xff08;broker&#xff09;的集合&#xff0c;它们一起工作以提供高可用性和可伸缩性服务。 RabbitMQ集群中的节点可以在同一物理服务器或不同的物理服务器上运行。 RabbitMQ集群的工作原理是&#xff0c;每个节点在一个…

语音识别芯片NRK3301在智能茶吧机的应用

传统的饮水机传大多只能提供热水和冷水&#xff0c;而智能茶吧机则是一款集合了热饮水机、煮茶器、泡茶壶等多种功能于一体的多功能生活电器。它不仅具备了传统饮水机的所有功能&#xff0c;还可以根据不同的需求&#xff0c;提供多种水温的饮水方式&#xff1b;还具备了煮茶和…

打开IE浏览器

原文地址&#xff1a;https://www.xiaoheiwoo.com/windows-11-internet-explorer/#:~:text%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows11%20%E4%B8%AD%E5%90%AF%E7%94%A8%20IE%E6%B5%8F%E8%A7%88%E5%99%A8%E7%9A%843%E7%A7%8D%E6%96%B9%E6%B3%95%201%20%E6%96%B9%E6%B3%95%E4%B8%80…

系列九、对象的生命周期和GC

一、堆细分 Java堆从GC的角度还可以细分为&#xff1a;新生代&#xff08;eden【伊甸园区】、from【幸存者0区】、to【幸存者1区】&#xff09;和老年代。 二、MinorGC的过程 复制>清空》交换 1、eden、from区中的对象复制到to区&#xff0c;年龄1 首先&#xff0c;当eden区…

C#开发的OpenRA游戏之世界存在的属性RenderDebugState(5)

C#开发的OpenRA游戏之世界存在的属性RenderDebugState(5) 前面分析过一个调试的属性,在这里分析另外一个属性,这个属性就是RenderDebugState,它就是用来显示渲染的信息。 跟前面的分析规则可知,属性都是有一个信息类和操作类组成。 在这里信息类叫RenderDebugStateInfo…

指针数组和数组指针的理解(个人理解版)

指针数组和数组指针的形式 int *p[3] // 指针数组 int (*p)[3] // 数组指针指针数组和数组指针的理解 1.指针数组 int *p[3] 首先找到变量p&#xff0c; &#xff08;1&#xff09;先与[]结合看&#xff08;因为[]优先级比*高&#xff09;&#xff0c;也就是p[3]&#…

2023亚太杯数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…

抖音小程序开发:疫苗预约系统的技术实现

在疫苗接种的背景下&#xff0c;借助抖音小程序&#xff0c;可以更好地整合用户社交信息和提供便捷的疫苗预约服务。 一、疫苗预约系统的需求分析 在开发抖音小程序疫苗预约系统之前&#xff0c;首先需要进行详细的需求分析。系统应该具备用户注册、疫苗信息展示、预约功能、…

前端安全策略保障

文章目录 前言后台管理系统网络安全XSSCSRFSQL注入 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出…

Nerf相关、公式

在3D重建领域&#xff0c;这幅图怎么理解 这张图展示的是“体素剪枝&#xff08;Voxel Pruning&#xff09;”在3D重建中的应用&#xff0c;这是一种利用稀疏性&#xff08;Sparsity&#xff09;来优化3D数据存储和处理的技术。体素剪枝的目的是为了降低存储需求和提高计算效率…

前端界面网页截图(干货)

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 看了一些谷歌插件&#xff0c;可以对网页进行局部截图或者是整个网页截图&#xff0c;于是想着弄个demo,关于前端的截图。最后选择了 html2canvas 1.下载安装包 Install NPM npm install --save html2canvas或者…

隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态

2023年11月 NearCon2023 活动期间&#xff0c;基于 Cosmos SDK 构建的隐私协议 Secret Network&#xff0c;宣布使用 Octopus Network 开发的 NEAR-IBC&#xff0c;于2024年第一季度实现 Secret Network 与 NEAR Protocol 之间的跨链交互。 这将会是Cosmos 生态与 NEAR 之间的首…

大模型幻觉成应用落地难题 最新评测文心一言解决幻觉能力最好文心一言解决幻觉能力最好 或成产业应用首选

“林黛玉倒拔垂杨柳”、“月球上面有桂树”、“宋江字武松”……相信经常使用大语言模型都会遇到这样“一本正经胡说八道”的情况。这其实是大模型的“幻觉”问题&#xff0c;是大模型行业落地的核心挑战之一。例如幻觉会影响生成内容的可靠性&#xff0c;对于法律、金融、医疗…

通用人工智能:迈向智能革命的下一步

原创 | 文 BFT机器人 AGI&#xff0c;全称为Artificial General Intelligence&#xff0c;中文翻译为“通用人工智能”&#xff0c;亦被称作强AI&#xff0c;是人工智能研究领域长期探讨的重要议题。此概念指的是在人类可能涉及的所有专业领域内&#xff0c;具备与人类智慧相当…

搜维尔科技:业内普遍选择Varjo头显作为医疗VR/AR/XR解决方案

Varjo 的人眼分辨率混合现实和虚拟现实头显将医疗专业人员的注意力和情感投入提升到更高水平。借助逼真的 XR/VR&#xff0c;医疗和保健人员可以为最具挑战性的现实场景做好准备&#xff01; 在虚拟、增强和混合现实中进行最高水平的训练和表现 以逼真的 3D 方式可视化医疗数据…

如何将本地Portainer管理界面结合cpolar内网穿透工具实现远程浏览器访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

时间同步时钟小课堂——常用的对时方式有哪些?

目前常用的对时信号有NTP 网口、B码、串口、脉冲等授时方式&#xff0c;分别介绍如下 1、NTP授时&#xff1a; 是基于NTP 协议实现网络授时的。NTP网络时钟同步协议是目前国际互联网通用的时间服务协议。NTP 协议采用 client/Server架构&#xff0c;基于 UDP/IP&#xff0c;使用…

js构造函数之工厂模式(学习笔记1)

目录 一、简单工厂 1、存储一个用户信息 2、存储N个用户信息 3、存储N个用户信息不同年龄用户有不同美食的搭配方案【简单工厂模式】 二、抽象工厂模式 1、抽象工厂(AbstractFactory) 2、具体工厂&#xff08;ConcreteFactory&#xff09; 3、生产新款手机 4、总结 本…

No matching version found for zr-map-ol@1.1.19.

问题描述&#xff1a; 通常情况下直接安装可能还会报错&#xff0c;因为有的依赖包是在私库里的 解决方法&#xff1a; 1.查看模块的注册信息 2. 安装 如果上面这种方式安装之后npm i还是报错&#xff0c;试试下面这种方式(我没有试下面的方式 上面的已经解决掉了) 具体可以参…