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实现生命之轮Wheel of life效果

《使用Python实现生命之轮Wheeloflife效果》生命之轮Wheeloflife这一概念最初由SuccessMotivation®Institute,Inc.的创始人PaulJ.Meyer... 最近看一个生命之轮的视频,让我们珍惜时间,因为一生是有限的。使用python创建生命倒计时图表,珍惜时间

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点