每天手撕一道算法题-130. 被围绕的区域
时间:2022-07-23
本文章向大家介绍每天手撕一道算法题-130. 被围绕的区域,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
每天手撕一道算法题-130. 被围绕的区域
130. 被围绕的区域
题目
解析:
根据题目:边界的O不会被填充。只要是与边界的O相连的O,不去改变。其余O都填充为X即可。
从一行最后一行,第一列与最后一列找到边界的O,找到与边界O相连的O,这些O都标记为V。
然后把所有的遍历一遍。标记为O的被抹成X。标记为V的是不能被抹的,改成原来的O。
代码
class Solution {
public void solve(char[][] a) {
// 两行或者两列的情况不用考虑,直接返回
if (a.length < 3 || a[0].length < 3) return;
// m行n列
int m = a.length, n = a[0].length;
// 第1列与最后1列
for (int i = 0; i < m; i++) {
dfs(a, i, 0);
dfs(a, i, n - 1);
}
// 第1行与最后1行,跳过重复的
for (int j = 1; j < n-1; j++) {
dfs(a, 0, j);
dfs(a, m - 1, j);
}
// 最后将所有的遍历一遍,是O的没被打标记,抹成X。打标记V的改成O。
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++) {
if (a[i][j] == 'O') a[i][j] = 'X';
if (a[i][j] == 'V') a[i][j] = 'O';
}
}
// i行j列
public void dfs(char[][] a, int i, int j) {
// 递归结束条件:越界或者不是O,就不再递归下去
if(i < 0 || i >= a.length || j < 0 || j >= a[0].length || a[i][j] != 'O') return;
a[i][j] = 'V';
dfs(a, i-1, j);
dfs(a, i+1, j);
dfs(a, i, j-1);
dfs(a, i, j+1);
}
}
- jQuery打造智能提示插件二(可编辑下拉框)
- Nicholas Christakis:朋友多是由基因决定的?
- WPF中的MatrixTransform
- kvm虚拟化管理平台WebVirtMgr部署-虚拟化环境安装-完整记录(0)
- ruby学习笔记(3)--语法层面的先见之明
- jQuery操作Select
- ruby学习笔记(11)--symbol与hash参数
- zabbix监控-基本原理介绍
- OpenStack构架知识梳理
- mysql操作命令梳理(4)-grant授权和revoke回收权限
- 问未来
- ruby on rails + mysql 开发环境搭建
- CentOS 7.2下安装Mono 5.0
- ROR学习笔记(1):Rails 2快速创建GRUD应用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CSDN如何自定义一个漂亮的模块
- centeros7安装mysql
- 使用Keras构建具有自定义结构和层次图卷积神经网络(GCNN)
- 给大忙人写的单例模式的八种实现方法
- 在Python中使用Torchmoji将文本转换为表情符号
- 我通过三个故事终于学明白了三种工厂模式
- 《设计模式》系列-SOLID设计原则
- (力扣)面试题56 - I. 数组中数字出现的次数
- 玩转 Java8 中的 Stream 之从零认识 Stream
- 聊聊dubbo-go的DubboInvoker
- 剑指Offer 面试题03. 数组中重复的数字
- SDAccel矩阵乘法优化(一)
- 花式玩 Spring Security ,这样的用户定义方式你可能没见过!
- 一文胜千言的DHCP的讲解以及DHCP服务器的配置
- 小知识 词云制作