[leetcode hot 150]第一百三十题,被围绕的区域

题目:

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

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

通过将输入矩阵 board 中的所有 'O' 替换为 'X' 来 捕获被围绕的区域

  1. 初始化和边界检查
    • 检查 board 是否为空或长度为零。
    • 获取矩阵的行数 m 和列数 n
  2. 标记边界上的 'O'
    • 遍历矩阵的边界(第一行、最后一行、第一列、最后一列),对于每一个 'O',使用 DFS 将其标记为 'B'。
  3. DFS 方法
    • 检查当前单元格是否在矩阵范围内,并且是否是 'O'。
    • 如果是 'O',将其标记为 'B'。
    • 递归处理当前单元格的上下左右四个方向。
  4. 替换和还原
    • 遍历整个矩阵,将所有的 'O' 替换为 'X'(这些是被围绕的区域)。
    • 将所有的 'B' 还原为 'O'(这些是边界上的或连接到边界的 'O')。

import java.util.Arrays;public class no_130 {public static void main(String[] args) {char[][] board = {{'X', 'X', 'X', 'X'},{'X', 'O', 'O', 'X'},{'X', 'X', 'O', 'X'},{'X', 'O', 'X', 'X'}};solve(board);for (char[] chars : board) {System.out.println(Arrays.toString(chars));}}public static void solve(char[][] board) {if (board == null || board.length == 0) {return;}int m = board.length;int n = board[0].length;for (int i = 0; i < m; i++) {dfs(board, i, 0);dfs(board, i, n - 1);}for (int j = 0; j < n; j++) {dfs(board, 0, j);dfs(board, m - 1, j);}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (board[i][j] == 'O') {board[i][j] = 'X';} else if (board[i][j] == 'B') {board[i][j] = 'O';}}}}private static void dfs(char[][] board, int i, int j) {int m = board.length;int n = board[0].length;if (i < 0 || i >= m || j < 0 || j >= n || board[i][j] != 'O') {return;}board[i][j] = 'B';dfs(board, i - 1, j);dfs(board, i + 1, j);dfs(board, i, j - 1);dfs(board, i, j + 1);}
}

本题关键:只要这个区域有一个点在边界上,那么这个区域肯定不能被围绕,除了边界的区域其他所有区域都是被围绕的,改为X。

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

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

相关文章

linux,docker,k8s常见命令

Linux 日志被删除查询日志 找到进程jps cd/proc/{pid}/fd su admin ls -lh|grep 文件名 在日期前的为id 然后tail -f id 后台运行 nohup & 删除文件 rm -f /opt/kibana-7.6.0-linux-x86_64.tar.gz 删除文件夹 rm -rf /opt/kibana-7.6.0-linux-x86_64 复制文件…

C++第一弹 -- C++基础语法上(命名空间 输入输出 缺省参数 函数重载 引用)

目录 前言一. C关键字(C98)二. 命名空间1.命名空间的定义2.命名空间的使用3.其它部分 三. C输入&输出四. 缺省参数1. 缺省参数的概念2.缺省参数的分类 五. 函数重载1.函数重载的概念2. 为什么C支持函数重载, 而C语言不支持重载呢? 六. 引用1.引用的概念2.引用的特性3.常引…

通过AIS实现船舶追踪与照射

前些天突然接到个紧急的项目&#xff1a;某处需要实现对夜航船只进行追踪并用激光灯照射以保障夜航安全。这个项目紧急到什么程度呢&#xff1f;&#xff01;现场激光灯都安装好了&#xff0c;还有三个星期就要验收了&#xff0c;但上家没搞定就甩给我们了:( 从技术上看&#…

mysql5.6写定时备份脚本

文章目录 设置脚本创建备份脚本配置执行权限配置定时任务打开crontab编辑器配置定时任务和执行脚本 查看路径下备份出来的数据内容20240706130701_test.sql文件内容 设置脚本 创建备份脚本 #!/bin/bash# 定义数据库连接参数 DB_USER"root" DB_PASSWORD"root&q…

Java应用系统设计与实现--学生信息管理系统(附解决方案源码)

一、实验目的及要求 1.1实验目的 掌握Java GUI编程技术&#xff0c;了解Swing框架的使用。 掌握MySQL数据库的基本操作&#xff0c;了解如何在Java中连接和操作数据库。 掌握用户权限管理的基本概念和实现方法。 提升综合运用所学知识设计和实现一个完整应用系统的能力…

windows机器免密登录linux主机

1. 正常连接需要输入密码 ssh root1.1.1.1 2. 在Windows上生成SSH密钥对&#xff08;如果你还没有的话&#xff09;&#xff1a; ssh-keygen 3. scp将id_rsa.pub传输到对应的主机 4.对应机器上查看 5.从windows上免密登录

ESP32 蓝牙网关实践:BLE 设备数据采集与 MQTT 云平台发布(附代码示例)

摘要: 本文详细介绍了如何使用 ESP32 构建强大的蓝牙网关&#xff0c;实现蓝牙设备与 Wi-Fi/互联网之间的无缝连接和数据桥接。文章涵盖了连接和桥接功能、数据处理和分析能力&#xff0c;并提供了详细的代码示例和 Mermaid 生成的图表&#xff0c;助您轻松构建自己的蓝牙网关解…

树(相关知识点)

目录 结点的度&#xff1a;某一个结点所含有字数的个数 叶节点&#xff1a;最后一个结点 非终端节点:不是叶结点 兄弟结点&#xff1a;亲兄弟结点 树的度&#xff1a;最大节点的度 层次&#xff1a;根为第一层&#xff0c;根的子结点为第二层&#xff0c;以此类推 森林&am…

Spring Boot与Okta的集成

Spring Boot与Okta的集成 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中集成Okta&#xff0c;实现身份认证和授权的功能…

Sass 和 SCSS

Sass 和 SCSS 是 Sass (Syntactically Awesome Stylesheets) 的两种语法。它们都被用于编写更加结构化和易于维护的 CSS。以下是它们在语法和特性上的主要对比&#xff1a; 1. 语法格式 Sass (缩进语法) 没有花括号 {} 和分号 ;。使用缩进来表示嵌套和层次关系。 navulmarg…

微软拼音输入法不显示选字框问题

问题展示&#xff1a;不显示选字框 解决方式 打开兼容性即可&#xff08;估计是升级带来的bug&#xff09;

探索参数化配置与系统性能的平衡点

在现代软件开发中&#xff0c;参数化配置已成为提高系统可扩展性和灵活性的关键方法之一。通过参数化配置&#xff0c;开发人员可以在不修改代码的情况下轻松调整系统行为&#xff0c;以适应不同的运行环境和需求。然而&#xff0c;尽管参数化配置带来了显著的好处&#xff0c;…

Android使用http加载自建服务器静态网页

最终效果如下图&#xff0c;成功加载了电脑端的静态网页内容&#xff0c;这是一个xml文件。 电脑端搭建http服务器 使用“Apache Http Server”&#xff0c;下载地址是&#xff1a;https://httpd.apache.org/download.cgi。具体操作步骤&#xff0c;参考&#xff1a;Apache …

深度学习与CV入门

文章目录 前言历史 前言 历史 tensorflow可以安装Tensorboard第三方库用于展示效果 TensorFlow工作流程&#xff1a;p6-4:20 使用tf.data加载数据。使用tf.data实例化读取训练数据和测试数据模型的建立与调试:使用动态图模式Eager Execution和著名的神经网络高层API框架Ker…

关于忠诚:忠于自己的良知、理想、信念

关于忠诚&#xff1a; 当我们面对公司、上司、爱人、恋人、合作伙伴还是某件事&#xff0c;会纠结离开还是留下&#xff0c;这里我们要深知忠诚的定义&#xff0c;我们不是忠诚于某个人、某件事、或者某个机构&#xff0c;而是忠诚于自己的良知&#xff0c;忠诚于自己的理想和…

1.1 常用文件管理命令

文章目录 前言正式学习文件系统常用的指令总结 前言 现在自己想做一个简单的编译器&#xff0c;但是安装环境就感觉非常难受&#xff0c;反正 linux 也是必须要学的&#xff0c;虽然&#xff0c;非常紧迫&#xff0c;但是很多事情着急也没有用&#xff0c;所以&#xff0c;现在…

ctfshow-web入门-文件上传(web151-web160)

目录 1、web151 2、web152 3、web153 4、web154 5、web155 6、web156 7、web157 8、web158 9、web159 10、web160 1、web151 试了下前端只能传 png 后缀的 将一句话木马改成 png 后缀&#xff0c;上传后用 burpsuite 抓包 绕过前端检测后&#xff0c;改回 php 后缀&am…

【AI应用探讨】—线性回归应用场景

目录 1. 经济学 2. 市场营销 3. 医学研究 4. 教育评估 5. 人力资源管理 6. 预测与趋势分析 7. 特征选择与异常值检测 总结 1. 经济学 GDP与失业率关系分析&#xff1a;通过线性回归模型&#xff0c;经济学家可以分析GDP增长与失业率之间的关系&#xff0c;了解经济增长…

Typescript中object和Object的区别

object&#xff1a; object 类型表示非原始对象&#xff0c;也就是除了 number, string, boolean, symbol, null 或 undefined 之外的任何类型。object 类型是所有对象类型的父类型&#xff0c;也就是说&#xff0c;任何对象类型都可以赋值给 object 类型&#xff0c;但是 obj…

阶段三:项目开发---搭建项目前后端系统基础架构:任务11:搭建项目后台系统基础架构

任务描述 1、了解搭建民航后端框架 2、使用IDEA创建基于SpringBoot、MyBatis、MySQL、Redis的Java项目 3、以原项目为参照搭建项目所涉及到的各个业务和底层服务 4、以原项目为例&#xff0c;具体介绍各个目录情况并参照创建相关文件夹 任务指导 1、讲框架的选择和原理 …