leetcode刷题日志-289生命游戏

2023-12-16 14:12

本文主要是介绍leetcode刷题日志-289生命游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
在这里插入图片描述
思路:用一个m*n的矩阵储存当前元素周围为1的元素数量

    /*** 为了保证当前修改后的状态不会影响下一个状态的判定,设置另外的状态* 如题所示,只有三种:* 1. 如果当前是活细胞,但是变成了死细胞,那么设置为-1* 2. 如果当前是活细胞,仍然是活细胞,那么不变仍为1* 3. 如果当前是死细胞,但是变成了活细胞,那么设置为2* 那么最后遍历修改完状态之后,将-1修改回为0,2修改回为1* @param board*/class Solution {public void gameOfLife(int[][] board) {//设置方向来遍历某个节点周围的另外几个节点int[] ner = new int[]{-1,0,1};//获取行和列int rows  = board.length;int cols = board[0].length;//遍历每一个节点格子for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {//设置当前节点周围的存活细胞的数量int liveNer = 0;/*** 当前节点是[ i , j ]* [i-1,j-1]    [i-1,j]    [i-1,j+1]* [ i ,j-1]    [ i ,j]    [ i ,j+1]* [i+1,j-1]    [i+1,j]    [i+1,j+1]* 那么以当前节点为中心,要求周围的节点,则最多是3*3形式* 并且所有的行和列都是用当前节点+1或者-1或者不变构成* 所以我们设置 ner = {-1,0,1} 来形成遍历*/for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {//必须保证不计算当前节点(不计算自己)if (!(ner[i]==0 && ner[j]==0)){//当前节点的相邻节点坐标int r = row+ner[i];int c = col+ner[j];/**判断当前周围节点的存活状态,要求满足两个状态* 1. 必须保证要在 board 矩阵中* 2. 并且起始状态要是存活,则当前状态为1或者-1都可以(因为这两个状态都表示起始状态为活细胞)**/if ((r>=0&&r<rows) && (c>=0&&c<cols) && (Math.abs(board[r][c])==1)){liveNer++;}}}}/**开始判断当前节点的存活状态* 因为遍历到当前节点的时候,还没有开始修改细胞状态,所以还是0和1的细胞状态* 那么只需要判断状态变化的即可,否则状态不变**/if ((board[row][col]==1) && ( liveNer>3 || liveNer<2)){// -1 代表这个细胞过去是活的现在死了board[row][col]=-1;}if (board[row][col]==0 && ( liveNer==3)){// 2 代表这个细胞过去是死的现在活了board[row][col]=2;}}}//再把额外的状态修改回去for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {if (board[row][col] == 2) {board[row][col] = 1;}if (board[row][col] == -1){board[row][col] = 0;}}}}}

这篇关于leetcode刷题日志-289生命游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/500772

相关文章

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

JAVA Log 日志级别和使用配置示例

《JAVALog日志级别和使用配置示例》本文介绍了Java中主流的日志框架,包括Logback和Log4j2,并详细解释了日志级别及其使用场景,同时,还提供了配置示例和使用技巧,如正确的日志记录方... 目录一、主流日志框架1. Logback (推荐)2. Log4j23. SLF4J + Logback

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

tomcat日志中文乱码问题及解决方案

《tomcat日志中文乱码问题及解决方案》文章主要介绍了在使用Tomcat时遇到的乱码问题及其解决方法,页面输出乱码可能由于server.xml配置、HTML标签、编程输出编码不一致引起,解决方法包括... 目录一、页面输出乱码1.server.XML配置未注明编码格式2.catalina.bawww.cp

Mysql利用binlog日志恢复数据实战案例

《Mysql利用binlog日志恢复数据实战案例》在MySQL中使用二进制日志(binlog)恢复数据是一种常见的用于故障恢复或数据找回的方法,:本文主要介绍Mysql利用binlog日志恢复数据... 目录mysql binlog核心配置解析查看binlog日志核心配置项binlog核心配置说明查看当前所

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Java 日志中 Marker 的使用示例详解

《Java日志中Marker的使用示例详解》Marker是SLF4J(以及Logback、Log4j2)提供的一个接口,它本质上是一个命名对象,你可以把它想象成一个可以附加到日志语句上的标签或戳... 目录什么是Marker?为什么使用Markejavascriptr?1. 精细化的过滤2. 触发特定操作3

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志