本题解答错误----暂做记录----130. 被围绕的区域

130. 被围绕的区域

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • _130被围绕的区域_dfs
    • _130被围绕的区域_bfs_01
  • 错误经验吸取

原题链接:

添加链接描述130. 被围绕的区域

https://leetcode.cn/problems/surrounded-regions/description/

完成情况:

在这里插入图片描述

在这里插入图片描述

解题思路:

这段代码实现了一个深度优先遍历算法,用于解决一个矩阵问题。下面是对代码的清晰、简洁和可读性强的解释:

  • 首先定义了一个二维数组position,包含四个方向的偏移量,分别为上、右、下、左。
  • dfs 方法用于深度优先遍历矩阵,从指定的位置(row, col)开始向四个方向进行搜索。
  • solve 方法用于解决矩阵问题,首先从左右两侧开始遍历,标记连通的区域为特殊值’A’,并调用dfs方法进行深度优先搜索。
  • 然后从上下两边开始遍历,同样标记连通的区域为特殊值’A’,不需要遍历四个角。
  • 最后遍历整个矩阵,将未被标记的’O’修改为’X’,将特殊值’A’修改回’O’。

这段代码的主要目的是将矩阵中被包围的区域中的’O’修改为’X’,被包围的条件是指该区域中的’O’必须与边界相连。

参考代码:

_130被围绕的区域_dfs

package 代码随想录.图论;public class _130被围绕的区域_dfs {int position[][] = {{1,0},{-1,0},{0,1},{0,-1}};/**** @param board*/public void solve(char[][] board) {int row = board.length,column = board[0].length;boolean[][] visited = new boolean[row][column];//一样的,先遍历掉外围for (int r = 0; r < row; r++) {if (board[r][0] == 'O' && !visited[r][0]){visited[r][0] = true;dfs_solve(board,row,0,visited);}if (board[r][column-1] == 'O' && !visited[r][column-1]){visited[r][column-1] = true;dfs_solve(board,r,column-1,visited);}}for (int c = 1;c < column-1;c++){if (board[0][c] == 'O' && !visited[0][c]){visited[0][c] = true;dfs_solve(board,0,c,visited);}if (board[row-1][c] == 'O' && !visited[row-1][c]){visited[row-1][c] = true;dfs_solve(board,row-1,c,visited);}}//将剩下部分全部判断并修改for (int r = 0;r<row;r++){for (int c = 0;c<column;c++){if (board[r][c] == 'O' && !visited[r][c])   board[r][c] = 'X';}}}private void dfs_solve(char[][] board, int row, int column, boolean[][] visited) {for (int [] pos : position){int nextRow = row + pos[0],nextCol = column + pos[1];//位置越界if (nextRow < 0 || nextRow >= board.length || nextCol < 0 || nextCol >= board[0].length)    continue;if (visited[nextRow][nextCol] || board[nextRow][nextCol] != 'O')    continue;visited[nextRow][nextCol] = true;dfs_solve(board,nextRow,nextCol,visited);}}}

_130被围绕的区域_bfs_01

package 代码随想录.图论;import java.util.ArrayDeque;
import java.util.Deque;public class `_130被围绕的区域_bfs_01` {int position[][] = {{1,0},{-1,0},{0,1},{0,-1}};/**A* 将所有与边界无关的‘0’全部替换成‘X’即可。* @param board*/public void solve(char[][] board) {int row = board.length,column = board[0].length;boolean[][] visited = new boolean[row][column];Deque<int []> myQueue = new ArrayDeque<int[]>();//先遍历外围边for (int r = 0;r < row;r++) {if (board[r][0] == 'O'){visited[r][0] = true;myQueue.add(new int[]{r,0});}if (board[r][column - 1] == 'O'){visited[r][column - 1] = true;myQueue.add(new int[]{r,column-1});}}//此处存在重复检查,不过影响不大的话,无所谓╮(╯_╰)╭for (int c = 1;c < column - 1;c++){if (board[0][c] == 'O'){visited[0][c] = true;myQueue.add(new int[]{0,c});}if (board[row-1][c] == 'O'){visited[row-1][c] = true;myQueue.add(new int[]{row-1,c});}}//然后对队列里面的元素进行四个角的循环找‘1’即可。while (!myQueue.isEmpty()){int curQueue [] = myQueue.poll();for (int pos [] : position){int r = curQueue[0] + pos[0],c = curQueue[1] + pos[1];//防止越界if (r < 0 || r >= row || c < 0 || c >= column)  continue;if (visited[r][c] || board[r][c] != '0')    continue;visited[r][c] = true;myQueue.add(new int[]{r,c});}}//最后遍历数组,把所有剩下的未访问到的’O‘改成’X‘for (int r = 0;r <row;r++){for (int c = 0;c < column;c++){if (board[r][c] == 'O' && !visited[r][c]){board[r][c] = 'X';}}}}
}

错误经验吸取

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

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

相关文章

JavaSE:抽象类和接口

目录 一、前言 二、抽象类 &#xff08;一&#xff09;抽象类概念 &#xff08;二&#xff09;使用抽象类的注意事项 &#xff08;三&#xff09;抽象类的作用 三、接口 &#xff08;一&#xff09;接口概念 &#xff08;二&#xff09;接口语法规则 &#xff08;三&a…

Leetcode 423. 从英文中重建数字

给你一个字符串 s &#xff0c;其中包含字母顺序打乱的用英文单词表示的若干数字&#xff08;0-9&#xff09;。按 升序 返回原始的数字。 示例 1&#xff1a; 输入&#xff1a;s “owoztneoer” 输出&#xff1a;“012” 示例 2&#xff1a; 输入&#xff1a;s “fviefur…

jakarta 实现 HttpClient

正在使用quarkus开发项目。使用jdk17&#xff0c;过去的HttpClient不能用了&#xff0c;经过一番周折&#xff0c;重新实现了HttpClient简单版&#xff0c;代码如下 import jakarta.enterprise.context.ApplicationScoped; import jakarta.ws.rs.client.Client; import jaka…

视频创作者必备应用!三步帮你解决前置内容条件,打造专属大片!

你还没尝试过AI视频生成&#xff1f;AI技术逐渐浸透我们的生活&#xff0c;太多的事物变得有了捷径可走。AI视频生成为创作者们提供更加便利快捷的输出形式&#xff0c;更优质更契合的生产内容。尝试AI视频生成系列应用&#xff0c;迎接AI宇宙&#xff01; 生成剧本分镜 视频…

Unity Toggle组件

Toggle Group组件 Allow Switch Off属性值为false时&#xff0c; 1&#xff0c;Toggle初始时默认会有一个被勾选&#xff08;ison为true&#xff09;&#xff0c;可以自己打勾指定 2&#xff0c;不能取消勾选 Allow Switch Off属性值为true时&#xff0c; 1&#xff0c;Toggl…

抖音招聘如何报白?

抖音招聘如何报白&#xff1f; 人力资源行业报白的好处&#xff0c;最直接的就是在直播和视频中发布招聘和企业信息&#xff0c;不用担心被封禁和限制流量。 可以通过抖音直播进行招聘&#xff0c;也可以在视频中添加小程序&#xff0c;流量不会受到限制&#xff0c;等于多了…

海德堡MC8B Kbox C101工业电脑维修印刷机工控机HEIDELBERG主机

海德堡推出具有增强自动化和人体工程学设计的新型印刷机 海德堡推出了新一代 Speedmaster SX 102&#xff0c;据称该打印机通过人工智能和其他自动化辅助系统进行了增强&#xff0c;可提供符合人体工程学的用户体验和高质量的商业印刷。 据海德堡介绍&#xff0c;Speedmaster…

LabVIEW专栏五、网口

该节目标编写一个网口调试VI。 上一章是串口&#xff0c;这章介绍网口的写法。 一、网口硬件 1.1、上位机网口 1.2、网口线 由线缆和水晶头组成&#xff0c;现在一般用5类和超5类的网线 1.3、接线方式 忽略&#xff0c;这里加上这点为了提醒一个硬件和上位机连接&#xf…

[Python学习篇] Python格式化输出

输出关键字 print 语法&#xff1a;print("内容") 示例&#xff1a;print("123") 格式化符号 符号转换%s字符串%c字符%d有符号的十进制整数 &#xff08;输出正整数 和负整数-&#xff09;%03d&#xff1a;表示输出3位数字&#xff0c;如果不足3位在数字前…

[NSSRound#8 Basic]MyPage

[NSSRound#8 Basic]MyPage 打开页面后什么都没有 尝试使用php伪协议 //读取文件源码 filephp://filter/readconvert.base64-encode/resourceindex.php 显示&#xff1a;空白一片 filephp://filter/readconvert.base64-encode/resource/var/www/html/index.php 显示&#xff1…

推箱子_java源码_50张地图_带背景音乐

一. 演示视频 推箱子_java源码_50张地图_带背景音乐 二. 实现步骤 完整项目获取 https://githubs.xyz/y23.html 部分截图 map地图实现 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00000000000000000000 00…

C# 关于Encoding编码 举例UTF8

在UTF-8编码中&#xff0c;一个字符可能由一个或多个字节组成。每个字节的前几位用于指示该字符需要多少字节来表示。具体来说&#xff0c;UTF-8编码使用以下规则&#xff1a; 如果一个字节的最高位是0&#xff0c;那么它表示一个ASCII字符&#xff0c;并且该字节就是该字符的…

SpringSecurity2

AuthenticationManagerBuilder 继承了之前提到的AbstractConfiguredSecurityBuilder构造器 postProcess安全对象的后处理&#xff0c;那么ProviderManager是什么 ProviderManager Authentication public interface Authentication extends Principal, Serializable {/**** …

学习笔记】java项目—苍穹外卖day05

文章目录 苍穹外卖-day05课程内容1. Redis入门1.1 Redis简介1.2 Redis下载与安装1.2.1 Redis下载1.2.2 Redis安装 1.3 Redis服务启动与停止1.3.1 服务启动命令1.3.2 客户端连接命令1.3.3 修改Redis配置文件1.3.4 Redis客户端图形工具 2. Redis数据类型2.1 五种常用数据类型介绍…

Spring 源码调试错误修复

Spring 源码调试错误修复 文章目录 Spring 源码调试错误修复1. fatal: not a git repository (or any of the parent directories): .git问题描述解决方案 2. fatal: Needed a single revision问题描述解决方案 1. fatal: not a git repository (or any of the parent director…

openGauss 函数及存储过程支持

函数及存储过程支持 可获得性 本特性自openGauss 1.1.0版本开始引入。 特性简介 函数和存储过程是数据库中的一种重要对象&#xff0c;主要功能将用户特定功能的SQL语句集进行封装&#xff0c;并方便调用。 客户价值 允许客户模块化程序设计&#xff0c;对SQL语句集进行封…

【ARM 嵌入式 C 头文件系列 22 -- 头文件 stdint.h 介绍】

请阅读【嵌入式开发学习必备专栏 】 文章目录 C 头文件 stdint.h定长整数类型最小宽度整数类型最快最小宽度整数类型整数指针类型最大整数类型 C 头文件 stdint.h 在 C 语言中&#xff0c;头文件 <stdint.h> 是 C99 标准的一部分&#xff0c;旨在提供一组明确的整数类型…

linux如何让alias自定义命令永久生效?

要让别名(alias)永久有效,您可以将它们添加到您的 bash 配置文件中。在大多数情况下,这个文件是 ~/.bashrc 或 ~/.bash_profile。 目录 1、打开终端或SSH连接到您的服务器。 2、编辑bash配置文件

Docker之ruoyi-vue项目部署

文章目录 创建自定义网络安装redis安装mysql发布若依项目--后端使用Dockerfile自定义镜像运行容器 nginx 创建自定义网络 #搭建net-ry局域网&#xff0c;用于部署若依项目 docker network create net-ry --subnet172.68.0.0/16 --gateway172.68.0.1 注意1&#xff1a;关闭宿主…

gateway应用(1)

1 简介 简单理解---业务服务的统一入口&#xff0c;方便实现&#xff0c;服务路由&#xff0c;安全&#xff0c;限流&#xff0c;过滤&#xff0c;黑白名单&#xff0c;证书加密解密&#xff0c;服务降级/熔断&#xff0c;灰度&#xff0c;等等 2 介绍 Predicate&#xff08…