leetcode 289. Game of Life(生命游戏)

生命游戏(game of life) NULL 博文链接:https://codeprac.iteye.com/blog/1125136 立即下载

According to the Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970.”

Given a board with m by n cells, each cell has an initial state live (1) or dead (0). Each cell interacts with its eight neighbors (horizontal, vertical, diagonal) using the following four rules (taken from the above Wikipedia article):

Any live cell with fewer than two live neighbors dies, as if caused by under-population.
Any live cell with two or three live neighbors lives on to the next generation.
Any live cell with more than three live neighbors dies, as if by over-population…
Any dead cell with exactly three live neighbors becomes a live cell, as if by reproduction.

Example:

Input:
[
[0,1,0],
[0,0,1],
[1,1,1],
[0,0,0]
]
Output:
[
[0,0,0],
[1,0,1],
[0,1,1],
[0,1,0]
]

给出一个数组,描述目前的life状态,然后给出几个生存规则,
现在是0时,如果它的一圈加起来只有不到2,下一状态还是0
现在是1时,如果它的一圈加起来是2或3,下一状态还是1
现在是1时,如果它的一圈加起来多于3,下一状态是0
现在是0时,如果它的一圈加起来是3,下一状态是1

总结一下:

下一状态初始化为0,所以不需要专门去设0,只需要考虑下一状态为1的情况

下一状态为1的情况:
不包含自身的话:
现在是0,周围一圈加起来是3
现在是1,周围一圈加起来是2或3

包含自身的话:
现在是0,3✖️3范围内的和是3
现在是1,3✖️3范围内的和是3或4

进一步总结:
下一状态为1的情况:
3✖️3范围内的和是3
3✖️3范围内的和 - 自身 = 3

第二个问题,直接更新board中的元素会对下一步运算产生影响
就需要重新定义一个一样大的数组来保存下一状态,但是题中函数没有返回值,所以最后还需要把保存的新状态再copy回原数组中,空间复杂度就是O(mn),时间也是O(mn)

为了达到O(1)空间复杂度,要有效利用bit位,因为状态只有0,1,所以仅需要1bit,可以用高一位的bit来保存下一状态,最后右移一位即得到结果

注意高位更新后,为了不对下一步计算产生影响,计算时用board[i][j] & 1来得到现在的状态

3✖️3窗口越界检测用max(0, i+1),min(max_row, i+1)来做,同理列

    public void gameOfLife(int[][] board) {
        if (board == null || board.length == 0 || board[0].length == 0) {
            return;
        }
        
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[0].length; j++) {
                int lives = 0;
                for (int m = Math.max(0, i-1); m <= Math.min(board.length-1, i+1); m++) {
                    for (int n = Math.max(0, j-1); n <= Math.min(board[0].length-1, j+1); n++) {
                        lives += board[m][n] & 1;
                    }
                }
                if (lives == 3 || (lives - (board[i][j] & 1) == 3)) {
                    board[i][j] |= 0x0002;
                }
            }
        }
        
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[0].length; j++) {
                board[i][j] >>= 1;
            }
        }
    }

或者不加自身,根据8个邻居的和来判断

    public void gameOfLife(int[][] board) {
        //1: die : <2, >3
        //1: live: 2~3
        //0: live: 3
        int rows = board.length;
        int cols = board[0].length;
        
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < cols; j++) {
                int sum = 0;
                for(int m = Math.max(i-1, 0); m <= Math.min(i+1, rows-1); m++) {
                    for(int n = Math.max(j-1, 0); n <= Math.min(j+1, cols-1); n++){
                        if(m == i && n == j) continue;
                        sum += board[m][n] & 0x0001;
                    }
                }
                if(sum == 3 || ((board[i][j] & 0x0001) == 1 && sum == 2)) board[i][j] |= 0x0002;
                
            }
        }
        
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < cols; j++) {
                board[i][j] >>= 1;
            }
        }
    }
python实现生命游戏的示例代码(Game of Life) 主要介绍了python实现生命游戏的示例代码(Game of Life),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 立即下载

相关推荐

【Flink cdc】Data row is smaller than a column index, internal schema representation is probably xxx

翻译一下:当scan.startup.mode=EARLIEST_OFFSET时,如果在最早的offset之后表结构有过变化就无法支持。原因应该是在binlog 的earliest_offset之后,表结构被修改过。我的解决方案:source配置中使用。mysql source配置使用。,以时间戳为消费依据。

integrity 2085

【生命游戏】纯前端web版,可在线体验

本文介绍了一个基于Web的生命游戏实现,作者将之前用Java Swing开发的版本重构为JavaScript网页版。文章提供了游戏简介、效果图展示和完整源码链接。生命游戏是由数学家J.H.Conway提出的细胞自动机,遵循四条基本规则:孤单死亡、拥挤死亡、稳定存活和复活。网页版通过HTML构建界面,CSS实现样式设计,JavaScript处理游戏逻辑。界面包含游戏说明、细胞网格显示区和操作面板,支持调整行列数量、演化速度和分布密度等参数,提供重新布置、随机分布、下一周期和开始演化等功能按钮。源码已开源在Gi

Nonoas的博客 1万+

vSphere环境证书更新/续订案例及注意事项

早期VMware的用户随后“十年之期”已到,陆陆续续出现各种登录问题,证书报错告警等,主要包含6.5到7.0的版本,VMware服务器虚拟化环境涉及的证书及类型较多,在实际更新中会出现各种奇怪的问题,有些坑耗费了大量的troubleshooting时间,极端情况下一天能看到十多遍如下报错😂本文整理了一个近期的更新案例,以及之前处理过的一些问题,仅作参考CA根证书颁发机构,用于签发其他组件的证书,其他证书的有效期不会超过根证书。

RaySun的技术Blog 3207

“生命游戏“(Game of Life)是一种模拟生命演化的零玩家游戏

然后,它开始迭代,每次迭代都会检查每个细胞,并根据康威生命游戏的规则更新细胞的状态。如果用户点击了网格,我们就将该网格的状态设置为存活,并停止当前的动画,然后重新开始动画。这样,用户就可以通过点击鼠标来添加新的细胞,并且可以看到添加新细胞后的生命游戏的演化。这样,用户就可以通过拖动鼠标来改变细胞的状态,并且可以看到改变后的生命游戏的演化。注意,上述代码只是一个基本的实现,并没有考虑一些可能的优化,例如使用并行计算来加快游戏迭代的进程。同时,也没有提供用户交互的功能,例如添加新的细胞或者改变细胞的状态等。

博客域名:borter.blog.youkuaiyun.com 1620

STC51单片机串口多字节数据接收的优化策略

本文深入探讨了STC51单片机串口多字节数据接收的优化策略。针对数据丢包、粘包等常见痛点,核心思路是采用“缓冲队列+定时器超时”模式,将实时处理转变为“先收纳,后处理”。文章详细讲解了硬件初始化、中断服务程序优化(快速入队与激活超时裁判)以及主循环的非阻塞设计,并进阶介绍了环形缓冲区实现与错误处理,旨在构建稳定可靠的串口通信系统。

weixin_29264201的博客 375

TensorFlow实战:5步搞定因果推断模型TARNet(附完整代码)

本文提供了一份基于TensorFlow的TARNet因果推断模型实战指南。通过五个清晰步骤,从数据预处理、模型构建到训练评估,详细讲解了如何利用深度模型解决营销评估、疗效分析等场景中的因果效应估计问题,并附有完整代码解决样本不平衡等工程挑战。

python9snake的博客 420

算法 | 生命游戏 (Game of Life)

本文将要介绍一个名为“生命游戏”的有趣算法并用C++进行简单的实现。本文的主要内容包括背景说明、算法原理、程序实现和结果分析。

Chen_Tianyang的博客 2万+

开发者的避坑指南:在Apple Silicon Mac上构建RocketMQ Python客户端的完整心路历程

本文详细记录了在Apple Silicon Mac上构建RocketMQ Python客户端的完整过程,重点解决了架构兼容性问题。通过源码编译rocketmq-client-cpp库,修复构建脚本和CMake配置,最终成功在M2芯片MacBook Pro上部署RocketMQ Python客户端,为开发者提供了实用的避坑指南。

Pepper的专栏 696

Python实现生命游戏(Game of Life)

生命游戏的算法就不多解释了,百度一下介绍随处可见。因为网上大多数版本都是基于pygame,matlab等外部库实现的,二维数组大多是用numpy,使用起来学习成本比较高,所以闲暇之余写一个不用外部依赖库,console输出的版本。# -*- coding: utf-8 -*- from time import sleep from copy import deepcopy WORLD_HIGH ......

其实我是一头猪的专栏 9763

优刻得首个「国产千卡智算集群」落地,支持智源千亿大模型训练

在人工智能引领的时代浪潮中,算力已成为技术进步与创新的核心驱动力。面对当下AI算力需求的飙升、高端AI芯片供应受限的挑战,加之OpenAI带来的技术封锁,唯有坚定不移的发展自主可控的国产技术方案,持续壮大国产智算集群规模,才能一路突破围追堵截,进一步促进国产大模型产业生态繁荣。集群还提供了完善高效的软件栈工具,集成多种主流的深度学习编程框架,通过测试验证,确保了对行业领先人工智能模型的高效支持,做到开箱即用,用户可快速投入模型的开发和部署,加速了其在人工智能领域的布局和发展。方面取得了显著成效。

Ucloud_TShare的博客 1474

Information Fusion投稿避坑指南:从初稿到返修的完整流程解析(附模板下载)

本文详细解析了向Information Fusion投稿的全流程,从初稿准备到返修策略,涵盖了22个关键细节。特别强调了投稿前的隐形门槛、LaTeX模板的字体陷阱、图表规范要求以及返修回复的进阶技巧,帮助研究者避免常见错误,提升稿件接受率。附有实用模板下载,助力学术写作效率提升。

tgb34567890的博客 1421

LeetCode 289 Game of Life(生命游戏)(Array)

翻译根据维基百科的文章介绍:“Game of Life,简称为Life,是一个被英国数学家John Conway在1970年提出的细胞自动分裂器。”给定一个m x n的空间,每个细胞有一个初始状态live(1)或dead(0)。每个细胞通过下面4种方式和周围的8个邻居交互(垂直、水平、交叉):1,当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)

nomasp 4896

电子元器件-接口电路篇:RS-232、RS485/422、I2C、SPI、USB、网口

以上规定说明了RS-232C 标准对逻辑电平的定义。对于数据(信息码):逻辑“1”的传输的电平为-3V~-15V,逻辑“0”传输的电平为+3V~+15V;对于控制信号;接通状态(ON)即信号有效的电平为+3V~+15V,断开状态(OFF)即信号无效的电平为-3V~-15V,也就是当传输电平的绝对值大于3V 时,电路可以有效地检查出来;

qq_60226558的博客 891

【LeetCode 面试经典150题】289. Game of Life 生命游戏

m x nm x n。

qq_43513394的博客 1385

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Leetcode 289.生命游戏(Game of Life)

Leetcode 289.生命游戏 1 题目描述(Leetcode题目链接)   根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。   给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态 live(1)即为活细胞, 或 dead(0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下...

qq_39378221的博客 464

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Leetcode289. Game of Life生命游戏

根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态 live(1)即为活细胞, 或 dead(0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律: 如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡; ...

lMonster81 337

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

leetcode 289. Game of Life | 289. 生命游戏(Java)

题目 https://leetcode.com/problems/game-of-life/ 题解 首先,遍历整个棋盘,如果是 1,就将上下左右的 count 值加 1。 然后,没有任何技巧,就是根据 count 值,拆 if-else。 如果要原地操作的话,可以使用位运算,一个 int 有 32 bit,输入数据只用了一个 bit,所以我们可以利用其他空闲的bit位进行“原地修改”。本文不再详述,可参考:https://leetcode-cn.com/problems/game-of-life/solu

寒泉 4万+

(Java) LeetCode 289. Game of Life —— 生命游戏

According to theWikipedia's article: "TheGame of Life, also known simply asLife, is a cellular automaton devised by the British mathematician John Horton Conway in 1970." Given aboardwithm...

anzeng0652的博客 347

LeetCode 289. Game of Life(生命游戏)

原题网址:https://leetcode.com/problems/game-of-life/ According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematici

James Pan 1038

leetcode 289. Game of Life 生命游戏

According to the Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970.” Given a board with m by n

JackZhangNJU的专栏 576

289. Game of Life-LeetCode(生命游戏)

先上题目: According to the Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970.” Given a board

WALLEZhe的博客 1147

【LeetCode】 289. Game of Life 生命游戏(Medium)(JAVA)每日一题

【LeetCode】 289. Game of Life 生命游戏(Medium)(JAVA) 题目地址: https://leetcode.com/problems/game-of-life/ 题目描述: According to the Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellula...

qq_16927853的博客 264

[Swift]LeetCode289. 生命游戏 | Game of Life

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30679823的博客 139

【LeetCode】 289. Game of Life 生命游戏(Medium)(JAVA)

【LeetCode】 289. Game of Life 生命游戏(Medium)(JAVA) 题目地址: https://leetcode.com/problems/game-of-life/ 题目描述: According to the Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Ho

qq_16927853的博客 425

[LeetCode] 289. Game of Life 生命游戏

According to theWikipedia's article: "TheGame of Life, also known simply asLife, is a cellular automaton devised by the British mathematician John Horton Conway in 1970." Given aboardwithmbyn...

weixin_30872867的博客 297
上一篇: leetcode 45/55. Jump Game/ 2(跳跃游戏)
下一篇: leetcode 64. Minimum Path Sum(最小路径和)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值