当前位置:网站首页>被围绕的区域
被围绕的区域
2022-07-26 22:42:00 【咖啡不加冰和糖】
题目描述:
给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。
找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。
思路分析:
该题和岛屿数量特别相似,这道题的难点在于边界的0和内部多个0的连通情况的处理,如下图:

底部边界的0和内部的0是连通的,所以都不需要把这些0改为X。
(1)我们可以对边界进行dfs遍历,将所有的连通的0找到,改为字母‘A’;
(2)遍历数组,遇到元素’0’,改为’X’,遇到元素‘A’,改为’0’
可知‘A’是不需要修改的,所以要改回去。
参考代码:
public void solve(char[][] board) {
if(board == null || board.length == 0)return;
int m = board.length;
int n = board[0].length;
//将左边界和右边界所有的0的连通全改为'A'
for(int i = 0; i < m; i++){
dfs(board, i, 0);
dfs(board, i, n - 1);
}
//将上边界和下边界所有的0的连通全改为'A'
for(int i = 1; i < n - 1; i++){
//这里注意,上面计算时把i=0和i=n-1都计算了
dfs(board, 0, i);
dfs(board, m - 1, i);
}
//将‘A’改回‘O’,将要改的‘O’改为‘X’
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(board[i][j] == 'A')board[i][j] = 'O';
else if(board[i][j] == 'O')board[i][j] = 'X';
}
}
}
//dfs找到所有的0连通元素,改为‘A’
public void dfs(char[][] board, int i, int j){
if(i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] != 'O')return;//这里注意:不能写成board[i][j] == 'X'
if(board[i][j] == 'O')board[i][j] = 'A';//关键代码
dfs(board, i + 1, j);
dfs(board, i - 1, j);
dfs(board, i, j + 1);
dfs(board, i, j - 1);
}小结:
dfs中的判断条件中:board[i][j] != 'O’不能改为 board[i][j] == ‘X’,如果改为后者,则对于如下的情况,将所有的‘O’改为‘A’后,board[i][j] == 'X’才返回,因为‘A’ != ‘X’,所以会一直进行递归:

类似题目:
边栏推荐
- Solve the problem of direct blue screen restart when VMware Workstation virtual machine starts
- Write the changed data in MySQL to Kafka through flinkcdc (datastream mode)
- Flink1.11 Jdcb方式写mysql测试用例
- Simple explanation of database table connection
- MYSQL数据库事务的隔离级别(详解)
- 李宏毅机器学习(2017版)_P5:误差
- Spark----- RDD 的 Shuffle 和分区
- Flink1.11 multi parallelism watermark test
- Flink checkpoint源码理解
- onSaveInstanceState和onRestoreInstanceState方法的调用
猜你喜欢

移动直播选择 RTMP 还是RTC协议

Flink checkpoint源码理解

不止直播:腾讯云直播MLVB 插件除了推流/拉流还有哪些亮眼功能

Status management in Flink

MySQL8.0中的隐藏索引和降序索引(新特性)

游戏项目导出AAB包上传谷歌提示超过150M的解决方案

Flink1.11 intervalJoin watermark生成,状态清理机制源码理解&Demo分析

DataNode Decommision

flink需求之—SideOutPut(侧输出流的应用:将温度大于30℃的输出到主流,低于30℃的输出到侧流)

New experience of mlvb cloud live broadcast: millisecond low latency live broadcast solution (with live broadcast performance comparison)
随机推荐
SparkSql之DataFrame
李宏毅机器学习(2017版)_P21:卷积神经网络CNN
DataNode Decommision
腾讯云MLVB技术如何在移动直播服务中突出重围之基础概念
Rabbit learning notes
Analysis of contentvalues
Which securities company has a low stock commission and which stock is safe to open an account
Reasons why row locks in MySQL upgrade table locks
Kubernetes 是什么 ?
MTCNN
李宏毅机器学习(2017版)_P3-4:回归
One of the Flink requirements - processfunction (requirement: alarm if the temperature rises continuously within 30 seconds)
基于Flink实时项目:用户行为分析(三:网站总浏览量统计(PV))
Spark源码学习——Data Serialization
Spark源码学习——Memory Tuning(内存调优)
Choose RTMP or RTC protocol for mobile live broadcast
李宏毅机器学习(2021版)_P7-9:训练技巧
Flink 1.15 implements SQL script to recover data from savepointh
Flask学习最佳入门指南
MySQL Article 1