LeetCode——被管绕的区域

news2024/12/23 15:03:06

题目描述

给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' 组成,捕获 所有 被围绕的区域

  • 连接:一个单元格与水平或垂直方向上相邻的单元格连接。
  • 区域:连接所有 'O' 的单元格来形成一个区域。
  • 围绕:如果您可以用 'X' 单元格 连接这个区域,并且区域中没有任何单元格位于 board 边缘,则该区域被 'X' 单元格围绕。

通过将输入矩阵 board 中的所有 '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"]]

解释:

在上图中,底部的区域没有被捕获,因为它在 board 的边缘并且不能被围绕。

题目解析

题目中的意思就是指将数组中被”X“包围”O“全部变成”X“,而只有和边界”O“相连的”O“才不会被”X“包围。

因此我们就可以从整个图的边界开始查找,找到所有与边界”O“相连的”X“,除了这些”O“,把剩下的全部”O“都变成”X“。

我们可以使用一个数组flag来标记各个位置,flase表示会此处为”X“或是可以被替换成”X“,true表示此处为和边界相连的”O“。

在搜索时可以使用深度优先搜索,从边界搜索到图中所有的符号,最后根据标记所得将所有的标记为false的变为”X“,这样我们就成功替换了所有被包围的”O“。

代码实现

class Solution {
    public void solve(char[][] board) {
        int n = board.length;
        int m = board[0].length;
        boolean[][] flag = new boolean[n][m];
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                flag[i][j] = false;
            }
        }
        for(int i=0;i<m;i++){
            if(board[0][i]=='O'&& !flag[0][i]){
                dfs(board,flag,0,i);
            }
            if(board[n-1][i]=='O'&& !flag[n-1][i]){
                dfs(board,flag,n-1,i);
            }
            
        }
        for(int i=0;i<n;i++){
            if(board[i][0]=='O'&& !flag[i][0] ){
                dfs(board,flag,i,0);
            }
            if(board[i][m-1]=='O'&& !flag[i][m-1]){
                dfs(board,flag,i,m-1);
            }
        }
        
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
               if(flag[i][j] == false){
                   board[i][j] = 'X';
               }
            }
        }
    }
    public void dfs(char[][] board,boolean[][] flag,int x,int y){
        if(x<0||x>=board.length||y<0||y>=board[0].length||board[x][y]=='X'||flag[x][y]){
            return;
        }
        flag[x][y] = true;
        dfs(board,flag,x,y-1);
        dfs(board,flag,x+1,y);
        dfs(board,flag,x-1,y);
        dfs(board,flag,x,y+1);
    }
}

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

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

相关文章

数据库系统概论:事务与并发一致性问题

随着网络应用的普及&#xff0c;数据库并发问题变得越来越重要。数据库并发指的是多个用户或进程同时访问和操作数据库的能力。它是数据库系统性能优化的重要方面&#xff0c;旨在提高系统的吞吐量和响应时间&#xff0c;以满足多用户同时访问数据库的需求。然而&#xff0c;这…

GPT-4o模型开通使用教学,解除使用限制【Outlook版】

OpenAI的GPT-4o模型免费用户都可以使用&#xff0c;但是遗憾的是每三小时可以使用十次问答。 但是还是有好多同学连使用都不会&#xff0c;今天这篇文章教会你如何使用并解除使用限制。 大家可以使用Outlook邮箱。 打开outlook官网选择中间获得免费账户。 ​ 在接下来的邮…

AGI 之 【Hugging Face】 的【零样本和少样本学习】之一 [构建标记任务] / [ 基线模型 ] 的简单整理

AGI 之 【Hugging Face】 的【零样本和少样本学习】之一 [构建标记任务] / [ 基线模型 ] 的简单整理 目录 AGI 之 【Hugging Face】 的【零样本和少样本学习】之一 [构建标记任务] / [ 基线模型 ] 的简单整理 一、简单介绍 二、零样本学习 (Zero-shot Learning) 和少样本学习…

【Qt】常用控件

文章目录 QWidgetenabledgeometrywindow framewindowTitlewindowIconqrc资源管理windowOpacitycursorfonttoolTipfocusPolicystyleSheet 按钮类PushButtonRadioButtonCheckBoxSignals 显示类LabelLCDNumberProgressBarCalendar 输入类LineEditTextEditComboBoxSpinBoxDateTimeE…

55 、mysql的存储引擎、备份恢复以及日志备份、恢复

一、数据库的存储引擎&#xff1a; 1.1、存储引擎的概念 概念&#xff1a;存储引擎&#xff0c;就是一种数据库存储数据的机制&#xff0c;索引的机制&#xff0c;索引的技巧&#xff0c;锁定水平。 存储的方式和存储的格式。 存储引擎也属于mysql当中的组件&#xff0c;实…

Python游戏开发之制作捕鱼达人游戏-附源码

制作一个简单的“捕鱼达人”游戏可以使用Python结合图形界面库&#xff0c;比如Pygame。Pygame是一个流行的Python库&#xff0c;用于创建视频游戏&#xff0c;它提供了图形、声音等多媒体的支持。以下是一个基础的“捕鱼达人”游戏框架&#xff0c;包括玩家控制一个炮台来射击…

小程序博客搭建分享,纯微信小程序原生实现

本项目代码已开源&#xff0c;具体见&#xff1a; 前端工程&#xff1a;vue3-ts-blog-frontend 后端工程&#xff1a;express-blog-backend 小程序源码&#xff1a;blog-weapp 数据库初始化脚本&#xff1a;关注公众号程序员白彬&#xff0c;回复关键字“博客数据库脚本”&…

【ML练习】决策树

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、决策树算法概述 二、代码实现 代码目标&#xff1a;我们希望通过鸢尾花数据&#xff0c;训练一个决策树模型&#xff0c;之后应用该模型&#xff0c;可以…

新的铸造厂通过 PROFIBUS 技术实现完全自动化

钢铁生产商某钢以其在厚钢板类别中极高的产品质量而闻名。其原材料&#xff08;板坯连铸机&#xff09;在钢铁厂本地生产&#xff0c;该厂最近新建了一座垂直连铸厂。该项目的一个主要目标是从一开始就完全自动化这座新工厂和整个铸造过程&#xff0c;以高成本效率实现最佳产品…

ue5 使用动画蒙太奇,混合上半身持枪姿势

ue5 使用动画蒙太奇 1.创建动画蒙太奇 添加上半身插槽&#xff0c;在添加持枪动画 搜索equip stand,t&#xff0c;添加进上半身插槽 2.设置动画蓝图 3.播放动画蒙太奇

AFAC2024-基于保险条款的问答 比赛日记 llamafactory qwen npu 910B1

AFAC2024: 基于保险条款的问答挑战——我的实战日记 概述 在最近的AFAC2024竞赛中&#xff0c;我参与了基于保险条款的问答赛道。这是一次深度学习与自然语言处理的实战演练&#xff0c;旨在提升模型在复杂保险文本理解与问答生成方面的能力。本文将分享我的参赛过程&#xf…

C语言 #字符指针

文章目录 前言 一、指针概念简述 二、字符指针 二、字符在内存中的存储 总结 前言 以例子为导向来分析字符指针的中存的是什么&#xff0c;以及常量字符串在内存中是如何存储的。 一、指针概念简述 想要详细地了解指针的概念可以戳此链接&#xff08;详细的万字讲解&#xff…

机器学习基础入门(1)

最近也在努力的想要学习些机器学习的知识&#xff0c;目前正在了解各个概念及术语&#xff0c;下面就把学习到的概念都列出来。 人工智能 (AI) Artificial intelligence 人工智能生成内容&#xff08;AIGC&#xff09; 机器学习&#xff08;ML&#xff09; Machine Learning …

《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境

安装 Visual Studio 2019 配置 MASM环境 下载 Visual Studio Installer安装 Visual Studio 20191. 双击运行2. 自定义安装内容3. 修改 MSVC 工具集版本4. 设置主题&#xff08;可选&#xff09;5. 安装代码高亮插件 AsmDude&#xff08;可选&#xff09;6. 通义灵码&#xff08…

【AI学习】关于Scaling Law的相关学习

一、苦涩的教训 首先&#xff0c;学习一段重要话语&#xff1a; The biggest lesson that can be read from 70 years of AI research is that general methods that leverage computation are ultimately the most effective, and by a large margin. 从70年的人工智能研究中…

服务器借助笔记本热点WIFI上网

一、同一局域网环境 1、当前环境&#xff0c;已有交换机组网环境&#xff0c;服务器已配置IP信息。 设备ip服务器125.10.100.12交换机125.10.100.0/24笔记本125.10.100.39 2、拓扑图 #mermaid-svg-D4moqMym9i0eeRBm {font-family:"trebuchet ms",verdana,arial,sa…

FastAPI(六十五)实战开发《在线课程学习系统》基础架构的搭建

在之前三篇&#xff0c;我们分享的就是需求的分析&#xff0c;基本接口的整理&#xff0c;数据库链接的配置。这次我们分享项目的基本框架&#xff0c;目录结构大致如下&#xff1a; common目录&#xff1a; 通用目录&#xff0c;放一些通用的处理 models目录&#xf…

达梦数据库(一)mysql2dm

达梦数据库(一)mysql2dm 文章目录 达梦数据库(一)mysql2dm一、安装篇ForWindows二、数据库初始化篇三、数据迁移篇出现的问题找不到对应表或者视图 注意字符集模式迁移出错大小写敏感解决方案 四、 代码修改篇group_concatGROUP BY方法一方法二(最笨)方法补充 多表联查更新参考…

【AI资讯】7.19日凌晨OpenAI发布迷你AI模型GPT-4o mini

性价比最高的小模型 北京时间7月19日凌晨&#xff0c;美国OpenAI公司推出一款新的 AI 模型“GPT-4o mini”&#xff0c;即GPT-4o的更小参数量、简化版本。OpenAI表示&#xff0c;GPT-4o mini是目前功能最强大、性价比最高的小参数模型&#xff0c;性能逼近原版GPT-4&#xff0…

python--实验15 数据分析与可视化

目录 知识点 1 数据分析概述 1.1流程 1.2定义 1.3数据分析常用工具 2 科学计算 2.1numpy 2.1.1定义 2.1.2创建数组的方式 2.1.3np.random的随机数函数 3 数据可视化 3.1定义 3.2基本思想 3.3Matplotlib库 3.3.1模块 4 数据分析 4.1Pandas 4.2数据结构 4.3基…