leetcode做题笔记130. 被围绕的区域

给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。

思路一:深度优先(DFS)

const int dx[4] = {1, -1, 0, 0};
const int dy[4] = {0, 0, 1, -1};void solve(char** board, int boardSize, int* boardColSize) {int n = boardSize;if (n == 0) {return;}int m = boardColSize[0];int** que = (int**)malloc(sizeof(int*) * n * m);for (int i = 0; i < n * m; i++) {que[i] = (int*)malloc(sizeof(int) * 2);}int l = 0, r = 0;for (int i = 0; i < n; i++) {if (board[i][0] == 'O') {board[i][0] = 'A';que[r][0] = i, que[r++][1] = 0;}if (board[i][m - 1] == 'O') {board[i][m - 1] = 'A';que[r][0] = i, que[r++][1] = m - 1;}}for (int i = 1; i < m - 1; i++) {if (board[0][i] == 'O') {board[0][i] = 'A';que[r][0] = 0, que[r++][1] = i;}if (board[n - 1][i] == 'O') {board[n - 1][i] = 'A';que[r][0] = n - 1, que[r++][1] = i;}}while (l < r) {int x = que[l][0], y = que[l][1];l++;for (int i = 0; i < 4; i++) {int mx = x + dx[i], my = y + dy[i];if (mx < 0 || my < 0 || mx >= n || my >= m || board[mx][my] != 'O') {continue;}board[mx][my] = 'A';que[r][0] = mx, que[r++][1] = my;}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (board[i][j] == 'A') {board[i][j] = 'O';} else if (board[i][j] == 'O') {board[i][j] = 'X';}}}for (int i = 0; i < n * m; i++) {free(que[i]);}free(que);
}

分析:

本题若从内向外分析则难以判断是否需要将O替换为X,所以从外向内分析。从外向内分析时可考虑将最外层的O先替换为A,再判断内部O是否与A相邻,并设置方向数组方便判断方向,最后从外向内递归数组即可完成

总结:

本题考察对深度优先搜索的应用,分析出从外向内不断判断的方法,再将边界情况考虑清楚即可解决

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

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

相关文章

数学建模--退火算法求解最值的Python实现

目录 1.算法流程简介 2.算法核心代码 3.算法效果展示 1.算法流程简介 """ 1.设定退火算法的基础参数 2.设定需要优化的函数,求解该函数的最小值/最大值 3.进行退火过程&#xff0c;随机产生退火解并且纠正,直到冷却 4.绘制可视化图片进行了解退火整体过程 &…

C# OpenVino Yolov8 Seg 分割

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp;namespace OpenVino_Yolov8_Demo {public…

web请求cookie中expires总结

用意 cookie 有失效日期 "expires"&#xff0c;如果还没有过失效期&#xff0c;即使重新启动电脑&#xff0c;cookie 仍然不会丢失 注意&#xff1a;如果没有指定 expires 值&#xff0c;那么在关闭浏览器时&#xff0c;cookie 即失效。 设置 如果cookie存储时间大…

RHCE——十七、文本搜索工具-grep、正则表达式

RHCE 一、文本搜索工具--grep1、作用2、格式3、参数4、注意5、示例5.1 操作对象文件&#xff1a;/etc/passwd5.2 grep过滤命令示例 二、正则表达式1、概念2、基本正则表达式2.1 常见元字符2.2 POSIX字符类2.3 示例 3、扩展正则表达式3.1 概念3.2 示例 三、作业1、作业一2、作业…

华为云云耀云服务器L实例评测|用docker搭建frp服务测试

华为云云耀云服务器L实例评测&#xff5c;用docker搭建frp服务测试 0. 环境 华为云耀云L实例EulerOS 1. 安装docker 检查yum源&#xff0c;本EulerOS的源在这里&#xff1a; cd /etc/yum.repos.d 更新源 yum makecache 安装 yum install -y docker-engine 运行测试 d…

ATFX汇市:美初请失业金人数21.6万人,连降四期,劳动力供需偏紧

ATFX汇市&#xff1a;9月7日&#xff0c;美国劳工部数据显示&#xff1a;美国至9月2日当周初请失业金人数最新值21.6万人&#xff0c;低于前值22.9万人&#xff08;修正前22.8万人&#xff09;&#xff0c;低于预期值23.4万人。回顾历史数据&#xff0c;美国初请失业率人数从25…

LabVIEW检测润滑油中的水分和铁颗粒

LabVIEW检测润滑油中的水分和铁颗粒 润滑油广泛应用于现代机械设备&#xff0c;由于工作环境日益恶劣&#xff0c;润滑油经常被水分乳化&#xff0c;加速对机械设备的腐蚀。此外&#xff0c;润滑油还受到机械零件摩擦中产生的Fe颗粒的污染&#xff0c;削弱了其机械润滑效果。润…

转发网关与NAT网关

在任何一台机器上&#xff0c;当要访问另一个 IP 地址的时候&#xff0c;都会先判断&#xff0c;这个目标 IP 地址&#xff0c;和当前机器的 IP 地址&#xff0c;是否在同一个网段。怎么判断同一个网段呢&#xff1f;需要 CIDR 和子网掩码。 如果是同一个网段&#xff0c;那就…

6种方法将python脚本打包成exe应用

文章目录 1、使用pyinstaller2、使用cx_Freeze3、使用py2exe4、使用py2app5、使用Nuitka6、使用Nuitkapyinstaller Python代码需要在Python解释器中运行&#xff0c;这对于一些用户来说可能不太方便。因此&#xff0c;将Python代码打包成可执行文件&#xff08;exe&#xff09;…

vue的学习

本地应用 v-text指令 v-text指令的作用是&#xff1a;设置标签的内容&#xff08;textContent&#xff09; 默认写法会替换全部内容&#xff0c;使用差值表达式{{}}可以替换指定内容 v-html指令 v-html指令的作用是&#xff1a;设置元素的innerHTML 内容中有html结构会被解…

操作视频的开始与暂停

调用 ref.current.play() 方法来播放视频&#xff1b; 如果视频需要暂停&#xff0c;我们调用 ref.current.pause() 方法来暂停视频。 通过 useRef 创建的 ref 操作视频的开始与暂停 当用户点击按钮时&#xff0c;根据当前视频的状态&#xff0c;我们会开始或暂停视频&…

图解 LeetCode 算法汇总——链表

本文首发公众号&#xff1a;小码A梦 一般数据主要存储的形式主要有两种&#xff0c;一种是数组&#xff0c;一种是链表。数组是用来存储固定大小的同类型元素&#xff0c;存储在内存中是一片连续的空间。而链表就不同于数组。链表中的元素不是存储在内存中可以是不连续的空间。…

SpringMVC自定义视图完成步骤 和 视图解析的源码剖析

自定义视图完成步骤&#xff1a; ● 7.2.1自定义视图完成步骤 1. 自定义视图**:** 创建一个 View 的 bean, 该 bean 需要继承自 AbstractView, 并实现 renderMergedOutputModel 方法**.** 2. 并把自定义 View 加入到 IOC 容器中 3. 自定义视图的视图处理器&#xff0c;使用…

redis核心数据结构

redis下载地址&#xff1a;Download | Redis linux进入redis目录首先使用make命令进行c的编译&#xff0c;修改redis.conf文件&#xff1a; daemonize yes #后台启动 protected-mode no #关闭保护模式&#xff0c;开启的 # 需要注释掉bind #bind 127.0.0.1&#xff08;bind…

Matlab二乘法进行参数拟合

matlab二乘法进行参数拟合 主函数&#xff1a; clear all; close all; clc; %% 原始数据可视化 JiBie[56 62 69 77 85 94 105]; Zongchengji[305 327 358 380 394 418 436]; figure(1); scatter(JiBie,Zongchengji,b*); grid on; xlabel(运动员体重);ylabel(运动员总成绩); ti…

2023-简单点-编译是什么?gcc是什么?

编译目的 把一种 程序 变成 另一种更接近机器指令 编译的术语 “接近专家的最快方法第一步&#xff0c;直接了解100行业黑话” 那么来了解一下&#xff0c;编译过程中的黑话&#xff1a; 词法分析语法分析中间代码目标代码代码优化出错管理表格管理 gcc是个什么? 一种编译…

MySQL5.7 在Window平台安装

一、下载 在MySQL的官网下载安装包 MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 这里我选择的是x64的ZIP安装包&#xff1b;点击Download下载 这里我选择的是直接开始下载 二、解压与初始化 将下载好的安装包解压&#xff0c;这里我解…

Qt应用开发(基础篇)——向导对话框 QWizard

一、前言 QWizard类继承于QDialog&#xff0c;为有向导界面需求的应用环境提供了一个框架。 对话框窗口 QDialog QWizard向导对话框是一个拥有队列界面的特殊对话框&#xff0c;向导的目的是引导用户一步一步的完成预设的流程。向导常用于软件安装界面向导、硬件线路安装向导、…

安全运营中心(SOC)技术框架

2018年曾经画过一个安全运营体系框架&#xff0c;基本思路是在基础单点技术防护体系基础上&#xff0c;围绕着动态防御、深度分析、实时检测&#xff0c;建立安全运营大数据分析平台&#xff0c;可以算作是解决方案产品的思路。 依据这个体系框架&#xff0c;当时写了《基于主动…

Emgu调用摄像头

1&#xff0c;安装EMgu 2,调用摄像头 public FaceLoad(){InitializeComponent();try{capture new Capture();capture.Start();//摄像头开始工作capture.ImageGrabbed frameProcess;//实时获取图像}catch (NullReferenceException excpt){//MessageBox.Show(excpt.Message);}}…