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)
}

执行结果如下:


左神java代码

2021-10-14:被围绕的区域。给你一个 m x n 的矩阵 board ,由若干字符 ‘X‘ 和 ‘O‘ ,找到所有被 ‘X‘ 围绕的区域,并将这些区域里所有的 ‘O‘ 用 ‘X‘ 填充。力扣1的更多相关文章

  1. Noip模拟76 2021.10.14

    T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...

  2. 日常Java 2021/10/14

    Java数据结构 Java BitSet类 BitSet类创建一种特殊类型的数组来保存位值,数组大小随需要增加,BitSet(),BitSet(int size) 其中的方法 void and(Bit ...

  3. 1 - JVM随笔分类(java虚拟机的内存区域分配(一个不断记录和推翻以及再记录的一个过程))

    java虚拟机的内存区域分配   在JVM运行时,类加载器ClassLoader在加载到类的字节码后,交由jvm的执行引擎处理, 执行过程中需要空间来存储数据(类似于Cpu及主存),此时的这段空间的分 ...

  4. 一个区域只能放置一个组件,如果想在一个区域放置多个组件就需要使用Panel来装载

    五种布局管理器: Flow Layout(流式布局):按照组件添加到容器中的顺序,顺序排放组件位置.默认为水平排列,如果越界那么会向下排列.排列的位置随着容器大小的改变而改变. Panel默认的布局管 ...

  5. Noip模拟70 2021.10.6

    T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...

  6. Noip模拟69 2021.10.5

    考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...

  7. 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 ...

  8. 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画

    [源码下载] 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 线性动画 - ColorAnimatio ...

  9. 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- ...

  10. macOS 10.14虚拟机安装教程

    windows10下安装vmware14.0以及macOS 10.14图文详解 工具/原料   windows10 vmware 14.0 macOS 10.14懒人版 mac补丁unlocker工具 ...

随机推荐

  1. 个人数据保全计划:(2) NAS基础知识

    前言 距离去年国庆入手了NAS至今有好几个月时间了,NAS折腾起来有点麻烦,且实际作用因人而异,并没有想象中的好用,所以说好的这个系列一直没有更新~ 还有另一方面的原因,这些NAS的系统基于Linux ...

  2. App 用户新体验——Agora Native SDK 3.4.0

    声网Agora Native SDK 3.4.0 本月已正式上线.新版本不仅增加了更丰富的实时美声音效.屏幕共享.虚拟节拍器等功能,同时在 SDK 的稳定性.兼容性及安全合规上做了大幅度升级,希望为 ...

  3. ArchLinux 作业系统安装教程

    如果你能看到此文,想必你一定玩过不少的发行商发行的 Linux 作业系统或者听说过很多发行商发行的 Linux 作业系统.如果你玩过不少的 Linux 作业系统,对于安装系统可谓是轻车熟路,就是闭着眼 ...

  4. SpringBoot——Swagger2 接口规范

    更多内容,前往 IT-BLOG 如今,REST和微服务已经有了很大的发展势头.但是,REST规范中并没有提供一种规范来编写我们的对外 REST接口 API文档.每个人都在用自己的方式记录 api文档, ...

  5. 在windows系统中设置MySQL数据库

    MySQL搭建 效果图 step1:下载安装包 https://downloads.mysql.com/archives/community/ step2:解压后即完成安装 step3:创建 my.i ...

  6. 剑指 offer 第 8 天

    第 8 天 动态规划(简单) 剑指 Offer 10- I. 斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N)).斐波那契数列的定义如下: F(0) ...

  7. flutter util---->常用的一些工具方法

    copy text to clipboard Clipboard.setData(ClipboardData(text: string)); since Flutter1.9, you can use ...

  8. 纯CSS3实现多行文本截断

    纯CSS处理多行文本展开和收起,直接上代码和效果图 1 <html> 2 <header> 3 <style> 4 .wrap { 5 position: rela ...

  9. 端口转发、Http Tunnel、内网穿透

    原文链接:https://www.yuque.com/tec-nine/architecture/mgxc71 SSH 命令帮助 命令行选项有: -a 禁止转发认证代理的连接. -A 允许转发认证代理 ...

  10. Linux文件系统故障,Input/output error

    事情是这样的,在启动某一个应用程序的时候,出现 Input/output error 的报错,磁盘以及目录无法使用的情况下,进行了重启,重启完成后是可以正常使用的,过一段时间后就会再次出现这个问题,一 ...