Leetcode.130 被围绕的区域

news2025/1/22 12:50:26

题目链接

Leetcode.130 被围绕的区域 mid

题目描述

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

示例 2:

输入:board = [[“X”]]
输出:[[“X”]]

提示:

  • m = = b o a r d . l e n g t h m == board.length m==board.length
  • n = = b o a r d [ i ] . l e n g t h n == board[i].length n==board[i].length
  • 1 < = m , n < = 200 1 <= m, n <= 200 1<=m,n<=200
  • board[i][j]'X''O'

解法:dfs

我们先从 b o a r d board board 的四周,与边界相邻的 b o a r d [ i ] [ j ] = board[i][j] = board[i][j]= ’O'的区域记录下来,这些区域是不能被 'X'填充的。

接着,剩下的 b o a r d [ i ] [ j ] = board[i][j] = board[i][j]= ’O'的区域才是能被 'X'填充的。

时间复杂度: O ( m n ) O(mn) O(mn)

C++代码:


class Solution {
public:
    void solve(vector<vector<char>>& g) {
        int m = g.size() , n = g[0].size();
        //记录是否被访问过
        bool vis[m][n];
        memset(vis,false,sizeof vis);

        function<void(int ,int,bool)> dfs = [&](int i,int j,bool mode) -> void{
            if(i < 0 || i >= m || j < 0 || j >= n || vis[i][j]) return;
            if(g[i][j] == 'X') return;
            
            vis[i][j] = true;
            if(mode) g[i][j] = 'X';

            dfs(i + 1,j,mode);
            dfs(i - 1,j,mode);
            dfs(i,j + 1,mode);
            dfs(i,j - 1,mode);
        };
        //记录从左右两边开始的 不能被 'X' 填充的位置
        for(int i = 0;i < m;i++){
            if(g[i][0] == 'O' && !vis[i][0]) dfs(i,0,false);
            if(g[i][n-1] == 'O' && !vis[i][n-1]) dfs(i,n-1,false);
        }
        //记录从上下两边开始的 不能被 'X' 填充的位置
        for(int j = 0;j < n;j++){
            if(g[0][j] == 'O' && !vis[0][j]) dfs(0,j,false);
            if(g[m-1][j] == 'O' && !vis[m-1][j]) dfs(m-1,j,false);
        }
        //剩下的 g[i][j] == 'O' 并且没有被访问过的位置 都可以被 'X'填充
        for(int i = 1;i < m - 1;i++){
            for(int j = 1;j < n - 1;j++){
                if(g[i][j] == 'O' && !vis[i][j]) dfs(i,j,true);
            }
        }
    }
};

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

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

相关文章

stm32霸道-lvgl移植学习(一)

文章目录效果有用链接要求创建工程屏幕驱动以及触屏驱动LVGL PortWidgets demo其它效果 目前显示驱动显示较慢&#xff0c;后续会优化。 有用链接 LVGL官网 代码下载 要求 要求最低要求 建议要求架构16、32、64位微控制器或微处理器时钟 > 16 MHz > 48 MHzFlash/RO…

《低代码PaaS驱动集团企业数字化创新白皮书》-平台化加低代码提供破解之道(1)

平台化加低代码提供破解之道 大型企业亟需通过下一代平台开发技术实现软件创新&#xff0c;实现对海量数据的采集加工&#xff0c;以及企业内部数据的互联互通&#xff0c;帮助客户以低成本、短周期、高效率的方式实现数字化应用&#xff0c;进而赋能业务创新。基于此&#xf…

408--计算机网络--网络层总结1

目录 一、网络层概述&#xff1a; 1、网络层的主要任务&#xff1a; 2、网络层向上提供两种服务&#xff1a; 二、IPV4地址分类与子网划分&#xff1a; 1、分类编址&#xff1a; 一、网络层概述&#xff1a; 1、网络层的主要任务&#xff1a; 络层的主要任务就是将分组从…

【数据库基操】启动与连接MySQL数据库

一、启动与关闭 只介绍一种方法&#xff1a; 打开命令行工具&#xff0c;以管理员身份运行 1.启动数据库 net start mysql80 //80是在安装的时候设置的名字&#xff08;默认&#xff09;&#xff0c;不用在意 2.关闭数据库 net stop mysql80 如题已经成功&#…

java获取本机ip的方法

Java中有一个类叫 Application&#xff0c;可以用来获取本机 ip&#xff0c;也可以用来获取网络连接的信息&#xff0c;例如网络上有什么主机、需要访问本机的主机名等。但是这个类只能在本机上使用&#xff0c;如果要访问外部的主机&#xff0c;还需要使用其它的方法。 首先在…

教育大数据总体解决方案(5)

&#xff08;4&#xff09;错题整理 将学生的本次考试错题进行集中整理&#xff0c;提炼出所有题目的题干和正确的答案。 &#xff08;5&#xff09;提高方案 分析学生对知识点掌握情况&#xff0c;推算出学生的进步空间以及下次考试的预测拔高分数。根据学生本次考试错误知识点…

你的APP内存还在暴增吗?试着用Bitmap管理下内存~

作者&#xff1a;layz4android 相信伙伴们在日常的开发中&#xff0c;一定对图片加载有所涉猎&#xff0c;而且对于图片加载现有的第三方库也很多&#xff0c;例如Glide、coil等&#xff0c;使用这些三方库我们好像就没有啥担忧的&#xff0c;他们内部的内存管理和缓存策略做的…

Java垃圾回收机制GC完全指南,让你彻底理解JVM运行原理

1、GC过程 1&#xff09;先判断对象是否存活(是否是垃圾) 可以通过引用计数算法和可达性分析算法来判断&#xff0c;由于引用计数算法无法解决循环引用的问题&#xff0c;所以目前使用的都是可达性分析算法 2&#xff09;再遍历并回收对象(回收垃圾) 可以通过垃圾收集器&…

使用Schrödinger Python API系列教程 -- 介绍 (一)

使用Schrdinger Python API系列教程 – 介绍 (一) 本文档可从Schrdinger网站www.schrodinger.com/pythonapi访问。 从Python文档字符串生成的完整API文档可以在这里访问 介绍 在最高级别上&#xff0c;Schrdinger Python API提供了一个基本的分子结构类&#xff0c;并允许与…

redis总结之-jedis

redis总结之-jedis4. Jedis4.1 Jedis简介4.1.1 编程语言与redis4.1.2 准备工作4.1.3 代码实现4.2 Jedis简易工具类开发4.2.1 基于连接池获取连接4.2.2 封装连接参数4.2.3 加载配置信息4.2.4 获取连接4.3 可视化客户端总结计划 1. Redis 入 门&#xff08;了解&#xff09;&…

LNMP网站框架搭建(编译安装的方式)

1. Nginx的工作原理 php-fpm.conf 是控制php-fpm守护进程的 php.ini是php解析器 工作进程&#xff1a; 1.客户端通过域名进行请求访问时&#xff0c;会找Nginx对应的虚拟主机 2. Nginx对该请求进行判断&#xff0c;如果是静态请求,Nginx会自行处理&#xff0c;并将处理结果…

因果推断14--DRNet论文和代码学习

目录 论文介绍 代码实现 DRNet ReadMe 因果森林 论文介绍 因果推断3--DRNet&#xff08;个人笔记&#xff09;_万三豹的博客-CSDN博客 摘要&#xff1a;估计个体在不同程度的治疗暴露下的潜在反应&#xff0c;对于医疗保健、经济学和公共政策等几个重要领域具有很高的实…

ERP系统有什么用?主要是这三方面

ERP 是Enterprise Resource Planning 的缩写&#xff0c;即企业资源计划系统,是建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。它实现了企业内部资源和企业相关的外部资源的整合。通过软件把企业的人、财、物、产、供、销及相应的物…

socket 到底是个啥

哈喽大家好&#xff0c;我是咸鱼 我相信大家在面试过程中或多或少都会被问到这样一个问题&#xff1a;你能解释一下什么是 socket 吗 我记得我当初的回答很是浅显&#xff1a;socket 也叫套接字&#xff0c;用来负责不同主机程序之间的网络通信连接&#xff0c;socket 的表现…

整柜海运到美国的规格和收费标准是什么

整柜海运是指将所有货物安装在一个整箱内&#xff0c;由发货人和收货人共同操作&#xff0c;而目的港的收货人一般只有一个&#xff0c;方便操作。整柜海运到美国的主要流程有以下几个步骤&#xff1a;订舱、装柜、报关、海运、清关、提柜和送货。实际上&#xff0c;国际物流出…

IDEA 2023.1 最新变化

IntelliJ IDEA 2023.1 最新变化 在 IntelliJ IDEA 2023.1 中&#xff0c;我们根据用户的宝贵反馈对新 UI 做出了大量改进。 我们还实现了性能增强&#xff0c;从而更快导入 Maven&#xff0c;以及在打开项目时更早提供 IDE 功能。 新版本通过后台提交检查提供了简化的提交流程…

写博客8年与人生第一个502万

题记&#xff1a;我们并非生来强大&#xff0c;但依然可以不负青春。 原本想好好写一下如何制定一个目标并通过一点一滴的努力去实现&#xff0c;这三年反思发现其实写自己的经历并不重要。 很多人都听过一句话&#xff1a;榜样的力量是无穷的。 更现实和实际的情况是&#x…

【LeetCode】每日一题:移除元素

目录 题目&#xff1a; 思想1&#xff1a;暴力解法 思想2&#xff1a;创建一个temp数组 思想3&#xff1a;双指针 &#x1f47b;内容专栏&#xff1a;《LeetCode刷题专栏》 &#x1f428;本文概括&#xff1a;27.移除元素 &#x1f43c;本文作者&#xff1a;花 碟 &#x1…

电商评论数据爬取--R语言

1.网络爬虫 1.1 什么是网络爬虫 网络爬虫&#xff08;web crawler&#xff09;&#xff0c;也被称为网络蜘蛛&#xff08;web spider&#xff09;&#xff0c;是在万维网浏览网页并按照一定规则提取信息的脚本或者程序。 浏览网页时&#xff0c;一般流程如下&#xff1a; 利…

C++语法(17)---- 二叉搜索树

1.概念 1.父节点的左子树全小于本身 2.父节点的右子树全大于本身 3.左右子树也是二叉搜索树 时间复杂度&#xff1a;O(N)&#xff0c;有可能只有左数&#xff0c;这样就遍历了所有&#xff0c;所有复杂度为N 平衡二叉树的时间复杂度才是&#xff1a;O(logN) 2.模拟 1.数据元素…