2021-10-14:被围绕的区域。给你一个 m x n 的矩阵 board ,由若干字符 ‘X‘ 和 ‘O‘ ,找到所有被 ‘X‘ 围绕的区域,并将这些区域里所有的 ‘O‘ 用 ‘X‘ 填充。力扣1
2021-10-14:被围绕的区域。给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。力扣130。
福大大 答案2021-10-14:
从四周边界开始感染,没感染到的区域,变成’X’。
时间复杂度:O(MN)。
空间复杂度:未知。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
if true {
board := [][]byte{{'X', 'X', 'X', 'X'}, {'X', 'O', 'O', 'X'}, {'X', 'X', 'O', 'X'}, {'X', 'O', 'X', 'X'}}
solve1(board)
for i := 0; i < len(board); i++ {
for j := 0; j < len(board[i]); j++ {
fmt.Printf("%c ", board[i][j])
}
fmt.Println("")
}
}
fmt.Println("---------")
if true {
board := [][]byte{{'X', 'X', 'X', 'X'}, {'X', 'O', 'O', 'X'}, {'X', 'X', 'O', 'X'}, {'X', 'O', 'X', 'X'}}
solve2(board)
for i := 0; i < len(board); i++ {
for j := 0; j < len(board[i]); j++ {
fmt.Printf("%c ", board[i][j])
}
fmt.Println("")
}
}
}
// // m -> 二维数组, 不是0就是1
// //
// public static void infect(int[][] m, int i, int j) {
// if (i < 0 || i == m.length || j < 0 || j == m[0].length || m[i][j] != 1) {
// return;
// }
// // m[i][j] == 1
// m[i][j] = 2;
// infect(m, i - 1, j);
// infect(m, i + 1, j);
// infect(m, i, j - 1);
// infect(m, i, j + 1);
// }
func solve1(board [][]byte) {
ans := make([]bool, 1)
for i := 0; i < len(board); i++ {
for j := 0; j < len(board[0]); j++ {
if board[i][j] == 'O' {
ans[0] = true
can(board, i, j, ans)
if ans[0] {
board[i][j] = 'T'
} else {
board[i][j] = 'F'
}
}
}
}
for i := 0; i < len(board); i++ {
for j := 0; j < len(board[0]); j++ {
can := board[i][j]
if can == 'T' || can == 'F' {
board[i][j] = '.'
change(board, i, j, can)
}
}
}
}
func can(board [][]byte, i int, j int, ans []bool) {
if i < 0 || i == len(board) || j < 0 || j == len(board[0]) {
ans[0] = false
return
}
if board[i][j] == 'O' {
board[i][j] = '.'
can(board, i-1, j, ans)
can(board, i+1, j, ans)
can(board, i, j-1, ans)
can(board, i, j+1, ans)
}
}
func change(board [][]byte, i int, j int, can byte) {
if i < 0 || i == len(board) || j < 0 || j == len(board[0]) {
return
}
if board[i][j] == '.' {
if can == 'T' {
board[i][j] = 'X'
} else {
board[i][j] = '0'
}
change(board, i-1, j, can)
change(board, i+1, j, can)
change(board, i, j-1, can)
change(board, i, j+1, can)
}
}
// 从边界开始感染的方法,比第一种方法更好
func solve2(board [][]byte) {
if len(board) == 0 || len(board[0]) == 0 {
return
}
N := len(board)
M := len(board[0])
for j := 0; j < M; j++ {
if board[0][j] == 'O' {
free(board, 0, j)
}
if board[N-1][j] == 'O' {
free(board, N-1, j)
}
}
for i := 1; i < N-1; i++ {
if board[i][0] == 'O' {
free(board, i, 0)
}
if board[i][M-1] == 'O' {
free(board, i, M-1)
}
}
for i := 0; i < N; i++ {
for j := 0; j < M; j++ {
if board[i][j] == 'O' {
board[i][j] = 'X'
}
if board[i][j] == 'F' {
board[i][j] = 'O'
}
}
}
}
func free(board [][]byte, i int, j int) {
if i < 0 || i == len(board) || j < 0 || j == len(board[0]) || board[i][j] != 'O' {
return
}
board[i][j] = 'F'
free(board, i+1, j)
free(board, i-1, j)
free(board, i, j+1)
free(board, i, j-1)
}
执行结果如下:

2021-10-14:被围绕的区域。给你一个 m x n 的矩阵 board ,由若干字符 ‘X‘ 和 ‘O‘ ,找到所有被 ‘X‘ 围绕的区域,并将这些区域里所有的 ‘O‘ 用 ‘X‘ 填充。力扣1的更多相关文章
- Noip模拟76 2021.10.14
T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...
- 日常Java 2021/10/14
Java数据结构 Java BitSet类 BitSet类创建一种特殊类型的数组来保存位值,数组大小随需要增加,BitSet(),BitSet(int size) 其中的方法 void and(Bit ...
- 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))
java虚拟机的内存区域分配 在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...
- 一个区域只能放置一个组件,如果想在一个区域放置多个组件就需要使用Panel来装载
五种布局管理器: Flow Layout(流式布局):按照组件添加到容器中的顺序,顺序排放组件位置.默认为水平排列,如果越界那么会向下排列.排列的位置随着容器大小的改变而改变. Panel默认的布局管 ...
- Noip模拟70 2021.10.6
T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...
- Noip模拟69 2021.10.5
考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...
- 2021.11.14 CF1583E Moment of Bloom(LCA+图上构造)
2021.11.14 CF1583E Moment of Bloom(LCA+图上构造) https://www.luogu.com.cn/problem/CF1583E 题意: She does h ...
- 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画
[源码下载] 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 线性动画 - ColorAnimatio ...
- Thinkpad W520 + Ubuntu 12.04LTS, 13.10, 14.04LTS安装Nvidia显卡驱动设置
Thinkpad W520 + Ubuntu 12.04LTS, 13.10, 14.04LTS安装Nvidia显卡驱动设置 http://henzhai.com/tech/2012/07/w520- ...
- macOS 10.14虚拟机安装教程
windows10下安装vmware14.0以及macOS 10.14图文详解 工具/原料 windows10 vmware 14.0 macOS 10.14懒人版 mac补丁unlocker工具 ...
随机推荐
- 个人数据保全计划:(2) NAS基础知识
前言 距离去年国庆入手了NAS至今有好几个月时间了,NAS折腾起来有点麻烦,且实际作用因人而异,并没有想象中的好用,所以说好的这个系列一直没有更新~ 还有另一方面的原因,这些NAS的系统基于Linux ...
- App 用户新体验——Agora Native SDK 3.4.0
声网Agora Native SDK 3.4.0 本月已正式上线.新版本不仅增加了更丰富的实时美声音效.屏幕共享.虚拟节拍器等功能,同时在 SDK 的稳定性.兼容性及安全合规上做了大幅度升级,希望为 ...
- ArchLinux 作业系统安装教程
如果你能看到此文,想必你一定玩过不少的发行商发行的 Linux 作业系统或者听说过很多发行商发行的 Linux 作业系统.如果你玩过不少的 Linux 作业系统,对于安装系统可谓是轻车熟路,就是闭着眼 ...
- SpringBoot——Swagger2 接口规范
更多内容,前往 IT-BLOG 如今,REST和微服务已经有了很大的发展势头.但是,REST规范中并没有提供一种规范来编写我们的对外 REST接口 API文档.每个人都在用自己的方式记录 api文档, ...
- 在windows系统中设置MySQL数据库
MySQL搭建 效果图 step1:下载安装包 https://downloads.mysql.com/archives/community/ step2:解压后即完成安装 step3:创建 my.i ...
- 剑指 offer 第 8 天
第 8 天 动态规划(简单) 剑指 Offer 10- I. 斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N)).斐波那契数列的定义如下: F(0) ...
- flutter util---->常用的一些工具方法
copy text to clipboard Clipboard.setData(ClipboardData(text: string)); since Flutter1.9, you can use ...
- 纯CSS3实现多行文本截断
纯CSS处理多行文本展开和收起,直接上代码和效果图 1 <html> 2 <header> 3 <style> 4 .wrap { 5 position: rela ...
- 端口转发、Http Tunnel、内网穿透
原文链接:https://www.yuque.com/tec-nine/architecture/mgxc71 SSH 命令帮助 命令行选项有: -a 禁止转发认证代理的连接. -A 允许转发认证代理 ...
- Linux文件系统故障,Input/output error
事情是这样的,在启动某一个应用程序的时候,出现 Input/output error 的报错,磁盘以及目录无法使用的情况下,进行了重启,重启完成后是可以正常使用的,过一段时间后就会再次出现这个问题,一 ...