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. 第七章ssh sftp scp

    第七章ssh sftp scp 对数据进行了加密和压缩 版本号协商,可能客户端和服务端的版本号不一致,服务端向客户端发送一个ssh协商,告诉客户端使用的ssh协议的版本号是多少,客户端在接收到了这个协 ...

  2. MySQL学习(二)事务的隔离级别

    :规定了一个事务中所做的修改,哪些在事务内和事务间是可见的,哪些是不可见的.较低级别的隔离通常可以执行更高的并发,系统的开销也更低 read uncommitted(未提交读):事务中的修改,即使没有 ...

  3. OVS学习博客推荐

    博客学习 大致看一遍 openvswitch处理upcall过程分析 upcall-cost分析 连接跟踪(conntrack):原理.应用及 Linux 内核实现 ovs upcall处理流程 Li ...

  4. 2020寒假学习笔记14------Python基础语法学习(三)

    今天学习了Python的基础语法,其中学的内容有: 比较运算符.逻辑运算符.同一运算符.整数缓存问题.基本运算符.复合复制运算符.运算符优先级问题.字符串基本特点.字符串的编码.空字符串和len()函 ...

  5. .NetCore中使用分布式事务DTM的二阶段消息

    一.概述 二阶段消息是DTM新提出的,可以完美代替现有的事务消息和本地消息表架构.无论从复杂度.性能.便利性还是代码量都是完胜现有的方案. 相比现有的消息架构借助于各种消息中间件比如RocketMQ等 ...

  6. 学习docker看此文足以

    什么是 Docker Docker 最初是 dotCloud 公司创始人  在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 ,主要项目代码在  上进行 ...

  7. 【Diary】CSP-S2 2021 游记 & NOIP 备赛发疯日记

    Day 0 两个极端的回跳. .....不行啊. 我快输不起了........... ------------------------------- 早上被生物钟强行唤醒,逼自己懒床到6:40. 弹琴 ...

  8. MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图

    MQTT(EMQX) - Linux CentOS Docker 安装 MQTT 概述 MQTT (Message Queue Telemetry Transport) 是一个轻量级传输协议,它被设计 ...

  9. LeeCode 317周赛复盘

    T1: 可被3整数的偶数的平均值 思路:数组遍历 被3整数的偶数 \(\Leftrightarrow\) 被6整数的数 public int averageValue(int[] nums) { in ...

  10. Zabbix_sender基础命令浅析

    zabbix_sender是Zabbix监控系统中用于向Zabbix服务器发送数据的命令行工具.以下是zabbix_sender基础命令教学: 语法: zabbix_sender -z <ser ...