Leetcode面试经典150题-130.被围绕的区域

给你一个 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 的边缘并且不能被围绕。

示例 2:

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

输出:[["X"]]

提示:

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

深度优先遍历,注意分析题意,其他的就不多说了,上代码,看不懂的请留言或者私信,收到第一时间解答

class Solution {/**这个题的突破口是什么样的才能不被捕获:我理解如果不被捕获,这个格子必定连着某个边缘的格子因为边缘的格子能连通它,所以它才不被捕获,这样我们就从边缘的O开始感染,所有被感染到的标记一个Y这样最后除了Y之外的全部设置成X就可以了 */public void solve(char[][] board) {for(int i = 0; i < board.length; i++) {/**只有边缘才配感染 */if(board[i][0] == 'O') {infect(board, i, 0);}if(board[i][board[i].length - 1] == 'O') {infect(board, i, board[i].length - 1);}}for(int j = 0; j < board[0].length; j++) {/**只有边缘才配感染 */if(board[0][j] == 'O') {infect(board, 0, j);}if(board[board.length - 1][j] == 'O') {infect(board, board.length - 1, j);}}/**根据感染的结果进行赋值*/for(int i = 0; i < board.length; i++) {for(int j = 0; j < board[i].length; j++) {board[i][j] = board[i][j] == 'Y'? 'O' : 'X';}}}public void infect(char[][] board, int row, int col) {if(row < 0 || row >= board.length || col < 0 || col >= board[row].length || board[row][col] != 'O') {return;}/**把自己感染成'Y'*/board[row][col] = 'Y';/**感染自己的上下左右 */infect(board, row - 1, col);infect(board, row, col + 1);infect(board, row + 1, col);infect(board, row, col - 1);}
}

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

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

相关文章

深入探究 Flask 的应用和请求上下文

目标 读完本文后&#xff0c;您应该能够解释&#xff1a; 什么是上下文哪些数据同时存储在应用程序和请求上下文中在 Flask 中处理请求时&#xff0c;处理应用程序和请求上下文所需的步骤如何使用应用程序和请求上下文的代理如何在视图函数中使用current_app和代理request什么…

vulnhub靶机:Fristileaks 详细过程

下载 下载地址&#xff1a;https://www.vulnhub.com/entry/fristileaks-13,133/ 修改网卡 网卡设置为nat模式&#xff0c;并修改mac地址为 08:00:27:A5:A6:76 信息收集 主机发现 arp-scan -l 发现靶机 IP 是 192.168.109.178 端口扫描 nmap -p- -A 192.168.109.178 目录…

CST电磁仿真77GHz汽车雷达保险杠

77G毫米波雷达仿真时&#xff0c;要考虑天线罩和保险杠的影响。通常保险杠都是多层结构&#xff0c;有的层非常薄。如果采用传统的3D建模方法&#xff0c;会导致网格数量巨大&#xff0c;进而影响到求解效率。 三维保险杠&#xff08;bumper&#xff09;模型如下图所示&…

react之jsx基础(1)概念和本质

文章目录 JSX 的基本概念1. **语法**2. **表达式**3. **属性**4. **子元素** JSX 的编译过程1. **转换成 JavaScript**2. **React 元素** JSX 的实际应用1. **组件定义**2. **组件嵌套** 总结 当然&#xff0c;以下是对 JSX 的详细讲解&#xff0c;包括其基本概念、语法、编译过…

JVM面试真题总结(十三)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ JVM的堆内存如何分区? 从垃圾收集&#xff08;Garbage Collectio…

日志框架的使用

一、日志概述 日志&#xff1a;用来记录程序运行过程中的信息&#xff0c;并可以进行永久存储。 开发过程中可能会出现以下需求&#xff1a; 希望系统能记住某些数据是被谁操作的&#xff0c;比如被谁删除了&#xff1f;想分析用户浏览系统的具体情况&#xff0c;以便挖掘用…

systemd学习

传统init进程启动流程 kernel内核代码init/main.c&#xff0c;内核启动init进程过程&#xff1a; init进程是由内核启动的第一个&#xff08;也是唯一的一个&#xff09;用户进程&#xff08;进程id为1&#xff09;&#xff0c;它根据配置文件决定启动哪些程序&#xff0c;ini…

我的AI工具箱Tauri版-VideoClipMixingCut视频批量混剪

本教程基于自研的AI工具箱Tauri版进行VideoClipMixingCut视频批量混剪。 VideoClipMixingCut视频批量混剪 是自研AI工具箱Tauri版中的一款强大工具&#xff0c;专为自动化视频批量混剪设计。该模块通过将预设的解说文稿与视频素材进行自动拼接生成混剪视频&#xff0c;适合需要…

【Finetune】(二)、transformers之Prompt-Tuning微调

文章目录 0、prompt-tuning基本原理1、实战1.1、导包1.2、加载数据1.3、数据预处理1.4、创建模型1.5、Prompt Tuning*1.5.1、配置文件1.5.2、创建模型 1.6、配置训练参数1.7、创建训练器1.8、模型训练1.9、推理&#xff1a;加载预训练好的模型 0、prompt-tuning基本原理 prompt…

【论文阅读】FedABC: Targeting Fair Competition in Personalized Federated Learning

论文链接&#xff08;AAAI2023&#xff09; 文章解决的问题主要是NO-IID问题。 文章的方法包括几个关键的技术和策略&#xff0c;具体如下&#xff1a; 二元分类框架&#xff1a; FedABC利用二元分类的训练策略来解决每个类别的个性化问题。这意味着对于每个类别都训练一个独立…

初识 C++ ( 1 )

引言&#xff1a;大家都说c是c的升级语言。我不懂这句话的含义后来看过解释才懂。 一、面向过程语言和面向对象语言 我们都知道C语言是面向过程语言&#xff0c;而C是面向对象语言&#xff0c;说C和C的区别&#xff0c;也就是在比较面向过程和面向对象的区别。 1.面向过程和面向…

JDBC 编程

目录 JDBC 是什么 JDBC 的工作原理 JDBC 的使用 引入驱动 使用 常用接口和类 Connection Statement ResultSet 使用总结 JDBC 是什么 JDBC&#xff08;Java Database Connectivity&#xff09;&#xff1a;Java数据库连接&#xff0c;是一种用于执行 SQL 语句的Java…

‍♀️焦虑症患者的救赎之路:这5项运动让你重拾宁静与力量!

在这个快节奏、高压力的时代&#xff0c;焦虑症已成为许多人难以言说的秘密。它像一张无形的网&#xff0c;悄悄侵蚀着我们的心灵&#xff0c;让我们在日复一日的焦虑中挣扎。然而&#xff0c;你知道吗&#xff1f;运动&#xff0c;这一简单而强大的自然疗法&#xff0c;正是我…

强化信息安全:密码机密钥管理的策略与实践

强化信息安全&#xff1a;密码机密钥管理的策略与实践 随着信息技术的飞速发展&#xff0c;信息安全已成为企业和社会关注的焦点。密码机作为加密通信和数据保护的关键设备&#xff0c;其密钥管理直接关系到整个信息系统的安全性。本文旨在探讨密码机密钥管理的策略与实践&…

Java 实现桌面烟花秀

前言 今天&#xff0c;我们将展示如何使用 Java Swing 创建一个烟花效果&#xff0c;覆盖整个桌面。我们将重点讲解如何在桌面上展示烟花、如何实现发射和爆炸效果&#xff0c;以及如何将这些效果整合到一个完整的程序中。 效果展示 如上图所示&#xff0c;我们在桌面实现了&…

深入解析ThingsBoard与ThingsKit物联网平台的差异

VS 在物联网(IoT)领域&#xff0c;平台的选择对于企业来说至关重要。本文将深入探讨ThingsBoard社区版与ThingsKit企业版这两个物联网平台的差异&#xff0c;帮助读者更好地理解它们的特色和适用场景。 系统相同点 首先&#xff0c;ThingsBoard社区版和ThingsKit企业版都基于…

Flink1.18.1 Standalone模式集群搭建

Flink1.18.1 Standalone模式集群搭建 Flink1.18.1 Standalone模式集群搭建1. 环境准备1.1 Flink下载地址1.2 集群角色分配 2. Flink 集群安装步骤2.1 下载并解压 Flink2.2 解压安装包2.3 配置环境变量2.4 配置 SSH 免密登录 3. 配置 Flink 集群3.1 修改 flink-conf.yaml 配置文…

Day99 代码随想录打卡|动态规划篇--- 01背包问题

题目&#xff08;卡玛网T46&#xff09;&#xff1a; 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等&am…

【linux008】目录操作命令篇 - rmdir 命令

文章目录 1、基本用法2、常见选项3、举例4、注意事项 rmdir 是 Linux 系统中的一个命令&#xff0c;用于删除空目录。它只能删除 空目录&#xff0c;如果目录中存在文件或子目录&#xff0c;则无法删除。 1、基本用法 rmdir [选项] 目录名...2、常见选项 -p, --parents&…

Linux标准IO-系统调用详解

1.1 系统调用 系统调用&#xff08;system call&#xff09;其实是 Linux 内核提供给应用层的应用编程接口&#xff08;API&#xff09;&#xff0c;是 Linux 应用层进入内核的入口。不止 Linux 系统&#xff0c;所有的操作系统都会向应用层提供系统调用&#xff0c;应用程序通…