Leetcode--289. 生命游戏

根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。

给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态 live(1)即为活细胞, 或 dead(0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:

如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;
如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;
如果死细胞周围正好有三个活细胞,则该位置死细胞复活;
根据当前状态,写一个函数来计算面板上细胞的下一个(一次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。

示例:

输入: 
[
  [0,1,0],
  [0,0,1],
  [1,1,1],
  [0,0,0]
]
输出: 
[
  [0,0,0],
  [1,0,1],
  [0,1,1],
  [0,1,0]
]
进阶:

你可以使用原地算法解决本题吗?请注意,面板上所有格子需要同时被更新:你不能先更新某些格子,然后使用它们的更新后的值再更新其他格子。
本题中,我们使用二维数组来表示面板。原则上,面板是无限的,但当活细胞侵占了面板边界时会造成问题。你将如何解决这些问题?

思路:因为不能立即更新数据,因为当前更新的数据会影响后面值的判断

因此采用标记法

如果该位置值不发生改变,那么不动它

改变的话,-1表示0转1,-2表示1转0

提交的代码:

class Solution {

    public void gameOfLife(int[][] board) {

        //-1表示0转1,-2表示1转0

         int sum,i,j;

            for(i=0;i<board.length;i++)

            {

                

                for(j=0;j<board[0].length;j++)

                {

                    sum=0;

                    if(i-1>=0)

                    {

                        if(board[i-1][j]==-1||board[i-1][j]==0)

                        {

                            sum+=0;

                        }

                        else

                        {

                            sum+=1;

                        }

                        if(j-1>=0)

                        {

                            

                            if(board[i-1][j-1]==-1||board[i-1][j-1]==0)

                            {

                                sum+=0;

                            }

                            else

                            {

                                sum+=1;

                            }

                        }

                        if(j+1<board[0].length)

                        {

                            if(board[i-1][j+1]==-1||board[i-1][j+1]==0)

                            {

                                sum+=0;

                            }

                            else

                            {

                                sum+=1;

                            }

                        }

                    }

                    if(j-1>=0)

                    {

                        if(board[i][j-1]==-1||board[i][j-1]==0)

                        {

                            sum+=0;

                        }

                        else

                        {

                            sum+=1;

                        }

                    }

                    if(j+1<board[0].length)

                    {

                        if(board[i][j+1]==-1||board[i][j+1]==0)

                        {

                            sum+=0;

                        }

                        else

                        {

                            sum+=1;

                        }

                    }

                    if(i+1<board.length)

                    {

                        if(j-1>=0)

                        {

                            if(board[i+1][j-1]==-1||board[i+1][j-1]==0)

                            {

                                sum+=0;

                            }

                            else

                            {

                                sum+=1;

                            }

                        }

                        if(j+1<board[0].length)

                        {

                            if(board[i+1][j+1]==-1||board[i+1][j+1]==0)

                            {

                                sum+=0;

                            }

                            else

                            {

                                sum+=1;

                            }

                        }

                        if(board[i+1][j]==-1||board[i+1][j]==0)

                        {

                            sum+=0;

                        }

                        else

                        {

                            sum+=1;

                        }

                    }

                if(board[i][j]==0)

                {

                    if(sum==3)

                    {

                        board[i][j] = -1;

                    }

                }

                else

                {

                    if(sum==2||sum==3)

                    {

                        

                    }

                    else

                    {

                        board[i][j] = -2;

                    }

                }

                    

                }

                

            }

            for(i=0;i<board.length;i++)

            {

                for(j=0;j<board[0].length;j++)

                {

                    if(board[i][j]==-1)

                    {

                        board[i][j] = 1;

                    }

                    else if(board[i][j]==-2)

                    {

                        board[i][j] = 0;

                    }

                }

            }

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度信念网络研究现状与展望

来源&#xff1a;专知摘要: 深度信念网络(Deep belief network, DBN)是一种基于深度学习的生成模型, 克服了传统梯度类学习算法在处理深层结构所面临的梯度消失问题, 近几年来已成为深度学习领域的研究热点之一.基于分阶段学习的思想, 人们设计了不同结构和学习算法的深度信念网…

使用JDBC进行简单连接

学习笔记&#xff1a;JDBC与数据库 集训的有关总结 连接数据库&#xff08;MySQL&#xff09;的步骤&#xff1a; 导入jar包(可以去官网下) 复制mysql-connector-java-5.1.37-bin.jar到项目libs目录下 右键–>Add As Library 注册驱动 获取数据库连接对象Connection 定…

Leetcode--41. 缺失的第一个正数

给定一个未排序的整数数组&#xff0c;找出其中没有出现的最小的正整数。 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11,12] 输出: 1 说明: 你的算法的时间复杂度应为O(n)&#xff0c;并且只能使用常数级别的空间。 思路:时间…

深度学习中的3个秘密:集成、知识蒸馏和蒸馏

作者&#xff1a;Zeyuan Allen-Zhu来源&#xff1a;AI公园编译&#xff1a;ronghuaiyang在现在的标准技术下&#xff0c;例如过参数化、batch-normalization和添加残差连接&#xff0c;“现代”神经网络训练 —— 至少对于图像分类任务和许多其他任务来说 —— 通常是相当稳定的…

对于JDBC的简单理解

什么是JDBC&#xff1f;为什么要使用JDBC&#xff1f; 1. JDBC JDBC是Java DataBase Connectivity的缩写&#xff0c;即Java程序访问数据库的标准接口使用Java程序访问数据库时&#xff0c;通过JDBC接口来访问JDBC驱动来实现对数据库的操作JDBC接口是Java标准库自带的&#xf…

BeautifulSoup

BeautifulSoup是一个模块&#xff0c;该模块用于接收一个HTML或XML字符串&#xff0c;然后将其进行格式化&#xff0c;之后遍可以使用他提供的方法进行快速查找指定元素&#xff0c;从而使得在HTML或XML中查找指定元素变得简单。 1. 安装 pip3 install beautifulsoup42.示例 fr…

Leetcode-45. 跳跃游戏Ⅱ

给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 …

研究揭示人类大脑进化的基因组调控机制

来源&#xff1a;中国科学院昆明动物研究所人类大脑起源于漫长的生命进化过程&#xff0c;其最显著的改变是大脑的认知功能&#xff0c;反映在脑容量的显著扩大和脑结构的高度精细化。在人类进化过程中&#xff0c;“哪些遗传改变造就了人类大脑”是学界长期力图解决的科学问题…

计算机组成原理笔记——存储器分类、层次结构、技术指标、存储单元地址分配

计算机组成原理笔记——存储器分类、层次结构、技术指标、存储单元地址分配 一. 概述 存储器的分类 按存储介质划分&#xff1a; (1)半导体存储器 双极型(TTL)、MOS (2)磁表面存储器 磁头、载磁体 (3)磁芯存储器(目前几乎已不被采用)硬磁材料、环状元件 (4)光盘存储器 激光、…

interceptor 拦截器的使用 (session验证)

需要引入 http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd之前是3.0.xsd mvc:exclude-mapping 报错 需要改成3.2.xsd <mvc:interceptors> <mvc:interceptor> <!-- 需拦截的地址 --> …

Leetcode--229. 求众数Ⅱ

给定一个大小为 n 的数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 说明: 要求算法的时间复杂度为 O(n)&#xff0c;空间复杂度为 O(1)。 示例 1: 输入: [3,2,3] 输出: [3] 示例 2: 输入: [1,1,1,3,3,2,2,2] 输出: [1,2] 思路&#xff1a; 摩尔投票法 超过…

刚刚,《The Scientist》预测了未来最热门的生命科学技术

图片来源&#xff1a;illumina来源&#xff1a;中国生物技术网去年&#xff0c;新冠疫情席卷全球&#xff0c;生物医学研究领域学者奋起应对挑战&#xff0c;并取得了前所未有的科学成就。2021年已来&#xff0c;尽管大流行还在继续&#xff0c;但美国《The Scientist&#xff…

Java Web项目的层次结构及常见分包

Java Web项目的层次结构及常见分包 Web项目中的层次 ControllerServiceDaoController层&#xff1a;表现层&#xff08;视图&#xff09;层。用来显示数据和接收用户数据Service层&#xff1a;业务逻辑层&#xff0c;用来处理页面。先写接口&#xff0c;后写实现类Dao层&#…

BZOJ3489 A simple rmq problem 【可持久化树套树】*

BZOJ3489 A simple rmq problem Description 因为是OJ上的题&#xff0c;就简单点好了。给出一个长度为n的序列&#xff0c;给出M个询问&#xff1a;在[l,r]之间找到一个在这个区间里只出现过一次的数&#xff0c;并且要求找的这个数尽可能大。如果找不到这样的数&#xff0c;则…

Leetcode--319. 灯泡开关

初始时有 n 个灯泡关闭。 第 1 轮&#xff0c;你打开所有的灯泡。 第 2 轮&#xff0c;每两个灯泡你关闭一次。 第 3 轮&#xff0c;每三个灯泡切换一次开关&#xff08;如果关闭则开启&#xff0c;如果开启则关闭&#xff09;。第 i 轮&#xff0c;每 i 个灯泡切换一次开关。 …

Eclipse中tomcat的简单配置

Eclipse中tomcat的简单配置 将Eclipse与tomcat相关联 如果下拉选项中没有jdk1.8.0_131&#xff0c;就点击后面的选项 把服务器视图调出来&#xff0c;方便之后调试 将tomcat服务器调入 如果要添加项目&#xff0c;点击右键&#xff0c;选择Add and Remove… 最后&#xff0…

AI智能体学会动物进化法则:李飞飞等提出深度进化RL

来源&#xff1a;机器之心编辑&#xff1a;杜伟、魔王、陈萍在过去 6 亿年中&#xff0c;进化带来了不同类型的「无尽之形最美」&#xff08;endless forms most beautiful&#xff09;&#xff0c;从古老的两侧对称虫到多种多样的动物形态。这些动物还展示出了显著的具身智能&…

Leetcode--22. 括号生成

给出 n 代表生成括号的对数&#xff0c;请你写出一个函数&#xff0c;使其能够生成所有可能的并且有效的括号组合。 例如&#xff0c;给出 n 3&#xff0c;生成结果为&#xff1a; [ "((()))", "(()())", "(())()", "()(())&quo…

DevExpress v18.1新版亮点——WPF篇(五)

用户界面套包DevExpress v18.1日前终于正式发布&#xff0c;本站将以连载的形式为大家介绍各版本新增内容。本文将介绍了DevExpress WPF v18.1 的新功能&#xff0c;快来下载试用新版本&#xff01;点击下载>> Spreadsheet Control Spreadsheet Shapes 从简单的线条、矩形…

tomcat修改端口号与eclipse中的tomcat保持一致

tomcat修改端口号与eclipse中的tomcat保持一致 将本地tomcat与eclipse中tomcat的配置信息保持一致&#xff1a;即将eclipse中的tomcat设置为托管模式 1. 添加项目 2. 查看server.xml文件中tomcat的端口号 3. 第一次创建tomcat实例后&#xff0c;双击tomcat服务器&#xff0c;选…