2021-11-02:生命游戏。根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个
2021-11-02:生命游戏。根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;如果死细胞周围正好有三个活细胞,则该位置死细胞复活;下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。给你 m x n 网格面板 board 的当前状态,返回下一个状态。力扣289。
答案2021-11-02:
利用格子的空闲位,采用位运算。这样就不用开辟新的空间。其他的,自然智慧即可。
时间复杂度:O(N*M)。
额外空间复杂度:O(1)。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
board := [][]int{{1, 1}, {1, 0}}
gameOfLife(board)
fmt.Println(board)
}
func gameOfLife(board [][]int) {
N := len(board)
M := len(board[0])
for i := 0; i < N; i++ {
for j := 0; j < M; j++ {
neighbors := neighbors(board, i, j)
if neighbors == 3 || (board[i][j] == 1 && neighbors == 2) {
board[i][j] |= 2
}
}
}
for i := 0; i < N; i++ {
for j := 0; j < M; j++ {
board[i][j] >>= 1
}
}
}
// b[i][j] 这个位置的数,周围有几个1
func neighbors(b [][]int, i int, j int) int {
return f(b, i-1, j-1) + f(b, i-1, j) + f(b, i-1, j+1) + f(b, i, j-1) + f(b, i, j+1) + f(b, i+1, j-1) + f(b, i+1, j) + f(b, i+1, j+1)
}
// b[i][j] 上面有1,就返回1,上面不是1,就返回0
func f(b [][]int, i int, j int) int {
if i >= 0 && i < len(b) && j >= 0 && j < len(b[0]) && (b[i][j]&1) == 1 {
return 1
} else {
return 0
}
}
执行结果如下:

2021-11-02:生命游戏。根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个的更多相关文章
- 2021.11.02 eleveni的水省选题的记录
2021.11.02 eleveni的水省选题的记录 因为eleveni比较菜,所以eleveni决定从绿题开始水 --实际上菜菜的eleveni连绿题都不一定能水过/忍不住哭了 [P2217 HAO ...
- 2021.11.03 P6175 无向图的最小环问题
2021.11.03 P6175 无向图的最小环问题 P6175 无向图的最小环问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给定一张无向图,求图中一个至少包含 33 ...
- C#运用实例.读取csv里面的词条,对每一个词条抓取百度百科相关资料,然后存取到数据库
第一步:首先需要将csv先装换成datatable,这样我们就容易进行对datatable进行遍历: /// 将CSV文件的数据读取到DataTable中 /// CSV文件路径 /// 返回读取了C ...
- libiconv_百度百科
libiconv_百度百科 由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码.目录 1libiconv历史简介 2libiconv编码简介 3libico ...
- Bee Framework_百度百科
Bee Framework_百度百科 Bee Framework 编辑 目录 1详细信息 简介 特性 2工作 主要模块 编译要求 运行要求 目录结构 运行例程 安装步骤 1详细信息 简介 ...
- AngularJS_百度百科
AngularJS_百度百科 AngularJS 编辑 AngularJS是为克服HTML在构建应用上的不足而设计的. 目录 1简介引引 端对 ...
- redis百度百科和维基百科知识总结:
1. 百度百科知识总结: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis ...
- Gora_百度百科
Gora_百度百科 Gora 编辑 目录 1什么是Apache Gora 2为什么要使用Apache Gora 3Gora的一个源代 ...
- salon_百度百科
salon_百度百科 salon 编辑 是法语Salon一字的译音,中文意即客厅,原指法国上层人物住宅中的豪华会客厅.从十七世纪,巴黎的名人(多半是名媛贵妇)常把客厅变成著名的社交 ...
- Milonga_百度百科
Milonga_百度百科 Milonga是Tango的一种.源于并盛行于阿根廷.6/8拍的舞曲.节奏为 AXX BXX CX 分别都是8分音符.由于第3组节奏音只有2个8分音符,比前2组而缺少 ...
随机推荐
- git 更换远程连接
原来的git仓库不可用,更换远程仓库 查看远程仓库地址 git remote -v 删除远程仓库 git remote rm origin 添加远程仓库地址 git remote add origin ...
- PXE(cobbler)搭建,自动系统安装
pxe pxe实现全自动安装操作系统,其中用到的软件包括(dhcp首先给客户端分配IP地址提供的系统引导安装系统指向tftp-server启动并加载网络repo仓库由http服务和系统镜像制作) dh ...
- 使用声网 SDK 构建 Piloteer 助盲服务平台的最佳实践
前言 在今年声网主办的「RTE2022 编程挑战赛」中,数支队伍经过一个多月的努力开发,很多优秀的作品最终突出重围,斩获大奖.本文由RTE2022编程挑战赛获奖者之一李新春撰写,他主要围绕获奖作品「P ...
- 什么是UV贴图和展开?
转载:https://baijiahao.baidu.com/s?id=1673723122020029798&wfr=spider&for=pc UV贴图是用于轻松包装纹理的3D模型 ...
- 《C++ STL编程轻松入门基础》溯源
由一PDF文档(<认识 C++STL>--Vtech Electronic Ltd (SZ) VTE/TV2 terrcy tang)而来,以为不完整,寻求更完全版. 后搜索"第 ...
- grub 命令使用
命令列表 ubuntu 的 iso 盘内一般有 command.lst 这个文件,里面是 grub 支持的命令 加载字体 ( 方便中文显示 ) grub> loadfont $prefix/fo ...
- VUE3.x之Proxy 我们为什么要使用Proxy
Object.defineProperty 劫持数据 只是对对象的属性进行劫持 无法监听新增属性和删除属性 需要使用 vue.set, vue.delete 深层对象的劫持需要一次性递归 劫持数组时需 ...
- 【原创】Ubuntu Pro 中的RealTime linux(Real-time Ubuntu/PREEMPT-RT/ubuntu官方PREEMPT-RT)
[原创]Ubuntu Pro 订阅中的realtime linux(Real-time Ubuntu/PREEMPT-RT) 目录 [原创]Ubuntu Pro 订阅中的realtime linux( ...
- 你绝对没想到的GPT的底层意义
学会说话才是完整的人 有种说法在民间流传已久,在某些非洲部落中,孩子出生后往往会被称作"小人"或者"半个人",直到他们能够进行语言的交流才被认为是完全的人.这是 ...
- Bootstrapd导航条使用
要想在程序中集成Bootstrap,显然要对模板做所有必要的改动.不过,更简单的方法是使用一个名为Flask-Bootstrap 的Flask 扩展,简化集成的过程. 安装:Flask-Bootstr ...