[LeetCode] 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.lengthn == board[i].length1 <= m, n <= 200board[i][j]为'X'或'O'
题目链接:
. - 力扣(LeetCode)
解题主要思路:
这题我觉得有两个麻烦,第一个麻烦就是不好理解题目啥意思,其实题目的意思是:除了边边的 'O' 以及能跟其构成‘连接’的 'O',其余的全部改成 'X'。第二个麻烦就是理解完题目的意思后,怎么把符合条件的区域 'O' 和 不符合条件的区域 'O' 分隔开来,其实有个办法就是,咱们遍历边边的元素,如果有不符合条件的 'O'(边边的 'O' 以及能跟其构成‘连接’的 'O'),咱们把他改成于 'O' 'X' 无关的符号,譬如 '?' ,之后二维数组内的所有 'O' 都是符合条件的 'O'(即需要改为 'X' 的),数组内的所有 '?' 都是原本不符合条件的 'O' ,我们需要将其改回来。
解题代码:
class Solution {
public:typedef pair<int, int> PII;int dx[4]{0, 0, 1, -1};int dy[4]{1, -1, 0, 0};int m, n;void solve(vector<vector<char>>& board) {m = board.size(), n = board[0].size();// 先将与边缘的‘O‘相连的全部改为’O‘、‘X’无关的符号,譬如'?';for (int i = 0; i < n; ++i) { // 第一行和最后一行if (board[0][i] == 'O') bfs(board, 0, i );if (board[m-1][i] == 'O') bfs(board, m-1, i);}for (int j = 0; j < m; ++j) { // 第一列和最后一列if (board[j][0] == 'O') bfs(board, j, 0);if (board[j][n-1] == 'O') bfs(board, j, n-1);}// 此时二维数组board里的全部'O'全部符合题目要求,可直接改成'X'for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {if (board[i][j] == '?') board[i][j] = 'O';else if (board[i][j] == 'O') board[i][j] = 'X';}}}void bfs(vector<vector<char>>& board, int r, int c){queue<PII> que;que.push(make_pair(r, c));board[r][c] = '?';while (que.size()) {auto [a, b] = que.front();que.pop();for (int i = 0; i < 4; ++i) {int x = a + dx[i];int y = b + dy[i];if (x >= 0 && x < m && y >= 0 && y < n && board[x][y] == 'O') {que.push(make_pair(x, y));board[x][y] = '?';}}}}
};
相关文章:
[LeetCode] 130. 被围绕的区域
题目描述: 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O 组成,捕获 所有 被围绕的区域: 连接:一个单元格与水平或垂直方向上相邻的单元格连接。区域:连接所有 O 的单元格来形成一个区域。围绕&#x…...
C语言位运算
目录 1.C语言位运算符表 2.C语言移位运算符详解(配实例作业) 3.C语言&按位与运算符详解 4.C语言|按位或运算符详解 5.C语言^按位异或运算符详解 6.C语言~取反运算符详解 C语言位运算这一章主要介绍C语言位运算符表、C语言移位运算符、C语言&按…...
Go 语言中格式化动词
当然,我很乐意为你提供 Go 语言中所有的格式化动词的完整列表。Go 语言的格式化动词非常丰富,可以满足各种打印和格式化需求。以下是完整的列表: 通用: %v - 以默认格式打印值 %v - 类似 %v,但对结构体会添加字段名 %#…...
CSS3 动画相关属性实例大全(四)(font、height、left、letter-spacing、line-height 属性)
CSS3 动画相关属性实例大全(四) (font、height、left、letter-spacing、line-height 属性) 本文目录: 一、font 属性(所有字体属性) 1.1、font-size属性(指定字体的大小) 1.2、f…...
大模型涌现判定
什么是大模型? 大模型:是“规模足够大,训练足够充分,出现了涌现”的深度学习系统; 大模型技术的革命性:延申了人的器官的功能,带来了生产效率量级提升,展现了AGI的可行路径&#x…...
LeetCode 1456.定长子串中元音的最大数目
题目: 给你字符串 s 和整数 k 。 请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。 英文中的 元音字母 为(a, e, i, o, u)。 思路:定长滑动窗口 入 更新 出 代码: class Solution {pub…...
freeswitch-esl 三方设备实现监听功能
使用场景: A和B在通话中,C想监听A和B通话内容 方法一: 修改拨号计划<extension name="global" continue="true"><condition><action application="info"/>...
【LeetCode】123.买卖股票的最佳时间
清晰明了的思路是解决问题的至上法宝。如何把一个复杂的问题拆成简单的问题,就是我们需要考虑的。 1. 题目 2. 思想 这道题虽然是难题,但是思想比较简单。 题目要求说至多买卖两次,也就是说,也可以买卖一次,这种情况…...
elk部署安装
elk部署 前提准备1、elasticsearch2、kibana3、logstash 前提准备 1、提前装好docker docker-compose相关命令 2、替换docker仓库地址国内镜像源 cd /etc/docker vi daemon.json # 替换内容 {"registry-mirrors": [ "https://docker.1panel.dev", "ht…...
使用 JAX 进行 LLM 分布式监督微调
LLM distributed supervised fine-tuning with JAX — ROCm Blogs (amd.com) 24年1月25日,Douglas Jia 发布在AMD ROCm 博客上的文章。 在这篇文章中,我们回顾了使用 JAX 对基于双向编码器表示(BERT)的大型语言模型(LL…...
【简单版】通过 Window.performance 实现前端页面(性能)监控
1 背景 前端监控系统告警xx接口fetchError 问题:前端监控系统没有更多的错误信息,查询该fetch请求对应的接口日志返回200状态码、无请求异常记录,且后台能查到通过该fetch请求成功发送的数据。那是前端页面的错误还是前端监控系统的问题&…...
微信小程序考试系统(lw+演示+源码+运行)
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序考试系统的开发全过程。通过分析微信小程序考试系统管理的不足,创建了一个计算机管理微信小程序考试系统的方案。文章介绍了微信小程序考…...
手机摄影入门
感觉会摄影的人是能够从生活中发现美的人。 我不太会拍照,觉得拍好的照片比较浪费时间,而且缺乏审美也缺乏技巧,所以拍照的时候总是拍不好。但有时候还是需要拍一些好看的照片的。 心态和审美可能需要比较长时间提升,但一些基础…...
微信小程序手机号授权获取(aes加密手机号)
<view class="container"> <view class=topTabSwiper> <view class=tab {{currentData == 0 ? "tabBorer" : ""}} data-current = "0" bindtap=checkCurrent>一键授权<span class="tab_bor"><…...
asyn queueRequest使用实例
使用queueRequest读写端口驱动的示例,驱动驱动程序使用一个基于asyn实现了asynCommon和asynOctet的驱动程序-CSDN博客中编写的驱动程序,本程序的C代码如下: #include <stdlib.h> #include <stdio.h> #include <string.h>#…...
关于jmeter设置为中文问题之后无法保存设置的若干问题
1、jemeter如何设置中文模式 Options--->Choose Language--->Chinese(Simplifies), 如此设置后就可显示中文模式(缺点:下次打开还是英文);如下图所示: 操作完成之后: 但是下次重启之后依旧是英文; 2、在jmeter.…...
基于FPGA的信号发生器verilog实现,可以输出方波,脉冲波,m序列以及正弦波,可调整输出信号频率
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 输出方波 输出脉冲波 输出m随机序列 输出正弦波 2.算法运行软件版本 vivado2019.2 3.部分核心程序 (完整…...
背景全文及翻译
背景 Oracle数据向MySQL同步,没有最新数据,于是在plsql手敲SQL筛选最新数据时,执行报错。 问题描述 通过日期字段筛选最近的数据,我用了类似这样的语句: SELECT * FROM orders WHERE order_date > 2022/01/01;我…...
JAVA地狱级笑话
为什么Java开发者总是不怕黑暗? 因为他们总是有null指针来照亮路。 Java程序员最讨厌的音乐是什么? Garbage Collection旋律,节奏总是让他们烦躁。 为什么Java中的HashMap很擅长社交? 因为它总是能快速找到key对应的朋友。 Java开…...
宝塔PHP8.1安装fileinfo拓展失败解决办法
在宝塔面板中安装PHP8.1后,安装fileinfo扩展一直安装不上,查看日志有报错,于是手动来安装也报错。 宝塔报错: 手动命令行编译安装同,也有报错 cd /www/server/php/81/src/ext/fileinfo/ make distclean ./configure …...
解决鸿蒙方向的Flutter框架版切换问题-当前最新版本3.35.8——工具切换与命令切换
欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net 最新版本的仓库地址: https://gitcode.com/openharmony-tpc/flutter_flutter/tree/oh-3.35.7-release 本地版本非最新版本 我当前的版本是3.27.5。 需要更新到最新的。 升…...
从零搭建PX4无人机仿真环境:Gazebo场景构建与Offboard模式初探
1. 环境准备:从零搭建PX4开发基础 第一次接触PX4无人机开发的朋友,往往会被复杂的工具链吓到。其实只要跟着正确的步骤走,半小时内就能搭建好完整的仿真环境。我用的是一台装好Ubuntu 20.04的笔记本,建议至少预留30GB磁盘空间。 关…...
如何使用WiFiManager打造智能零售网络:从自助结账到智能货架的无缝配置方案
如何使用WiFiManager打造智能零售网络:从自助结账到智能货架的无缝配置方案 【免费下载链接】WiFiManager ESP8266 WiFi Connection manager with web captive portal 项目地址: https://gitcode.com/gh_mirrors/wi/WiFiManager 在现代零售环境中,…...
React on Rails 国际化(i18n)终极指南:如何快速实现多语言支持
React on Rails 国际化(i18n)终极指南:如何快速实现多语言支持 【免费下载链接】react_on_rails Integration of React Webpack Rails including server-side rendering of React, enabling a better developer experience and faster client performance. 项目…...
如何在Linux上快速安装Linuxbrew:10分钟完成设置终极指南
如何在Linux上快速安装Linuxbrew:10分钟完成设置终极指南 【免费下载链接】brew :beer::penguin: The Homebrew package manager for Linux 项目地址: https://gitcode.com/gh_mirrors/bre/brew 想在Linux系统上轻松管理软件包吗?Linuxbrew就是你…...
BLIP-2:如何通过Q-Former桥接冻结视觉与大语言模型实现高效多模态预训练
1. BLIP-2为什么能成为多模态预训练的里程碑 第一次看到BLIP-2论文时,最让我惊讶的是它用如此"简单"的方式解决了多模态预训练的两个核心痛点。传统方法就像要求一个厨师同时精通中餐和西餐,而BLIP-2的创新在于让中餐主厨和西餐主厨各司其职&a…...
从Python到Maple:给程序员的数据结构与函数包迁移避坑手册
从Python到Maple:给程序员的数据结构与函数包迁移避坑手册 当你习惯了Python的灵活与简洁,突然切换到Maple的数学王国时,那种感觉就像从喧闹的都市搬进了严谨的实验室。作为一款专注于符号计算和数学建模的工具,Maple有着独特的思…...
Windows 11性能诊断与优化实战:如何用Win11Debloat让系统提速60%
Windows 11性能诊断与优化实战:如何用Win11Debloat让系统提速60% 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declut…...
输入法词库跨平台迁移的技术实现与最佳实践
输入法词库跨平台迁移的技术实现与最佳实践 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 跨平台输入体验的核心痛点 在数字化办公环境中,用户通常面临…...
别再只改Keycloak登录密码了!从一次‘误报’漏洞,聊聊真正的中间件安全加固
从Keycloak密码事件看中间件安全:超越弱口令的防御体系 上周团队收到一份来自第三方安全机构的漏洞扫描报告,其中赫然标注着我们的Keycloak服务存在"弱口令漏洞"。令人困惑的是,我们早已将默认的admin/admin密码修改为包含大小写字…...
