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

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

如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;
如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;
如果死细胞周围正好有三个活细胞,则该位置死细胞复活;
下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。给你 m x n 网格面板 board 的当前状态,返回下一个状态。

示例 1:

输入:board = [[0,1,0],[0,0,1],[1,1,1],[0,0,0]]
输出:[[0,0,0],[1,0,1],[0,1,1],[0,1,0]]

示例 2:

输入:board = [[1,1],[1,0]]
输出:[[1,1],[1,1]]

析:

朴素描述法:
首先copy一份board数组,不然board一直在修改过程中,活细胞存活数一直在改变。
只统计copy数组的活细胞个数,来对应更改board数组细胞的存活状态就行了。

解:

public class Test {public static void main(String[] args) {int[][] nums = {{0, 1, 0}, {0, 0, 1}, {1, 1, 1}, {0, 0, 0}};Test test = new Test();test.gameOfLife(nums);int rows = nums.length;int cols = nums[0].length;for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {System.out.print(nums[i][j]);}System.out.println();}}public void gameOfLife(int[][] board) {int[] neighor = {-1, 0, 1};int rows = board.length;int cols = board[0].length;int[][] copy = new int[rows][cols];// 复制细胞面板,防止board二维数组被更新后,影响后序结果for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {copy[i][j] = board[i][j];}}for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {int liveNeighbor = 0;// 遍历附近8个位置for (int k = 0; k < 3; k++) {for (int l = 0; l < 3; l++) {if (!(neighor[k] == 0 && neighor[l] == 0)) {int ro = i + neighor[k];int co = j + neighor[l];if (ro >=0 && ro < rows && co >= 0 && co < cols && copy[ro][co] == 1){liveNeighbor += 1;}}}}if (liveNeighbor <2 || liveNeighbor >3 ){board[i][j] = 0;}if (liveNeighbor == 3){board[i][j] = 1;}}}}
}

289. 生命游戏。相关推荐

  1. LeetCode 289. 生命游戏(位运算)

    文章目录 1. 题目 2. 解题 2.1 复制数组解法 2.2 原地解法 2.3 位运算 1. 题目 链接:289. 生命游戏 2. 解题 2.1 复制数组解法 很简单,按照题意模拟即可 class ...

  2. LeetCode 289. 生命游戏

    289. 生命游戏 思路:数每个格子周围Cell存活数 笔记:vector复制 vector<vector<int> > tmp(board); class Solution ...

  3. 【leetcode】289.生命游戏 (三种解法开阔思路,java实现)

    289. 生命游戏 难度中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个 ...

  4. [leetcode][289. 生命游戏]

    根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初始状态 liv ...

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

    题目 https://leetcode.com/problems/game-of-life/ 题解 首先,遍历整个棋盘,如果是 1,就将上下左右的 count 值加 1. 然后,没有任何技巧,就是根据 ...

  6. c语言 细胞自动机,Leetcode 289. 生命游戏 (细胞自动机)

    二维网格遍历注意使用技巧让代码可读性强. 原始的思路是使用一个二维数组进行更新,当全部更新完以后,复制这个二维数组到原来的数组上. 可不可以优化,不使用额外的空间,答案是可以的 细胞的状态如下:    ...

  7. LeetCode 0289. 生命游戏

    [LetMeFly]289.生命游戏 力扣题目链接:https://leetcode.cn/problems/game-of-life/ 根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约 ...

  8. [Leetcode] 第289题 生命游戏

    一.题目描述 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初 ...

  9. [Leedcode][JAVA][第289题][生命游戏]

    [问题描述] 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机.给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞都具 ...

最新文章

  1. 《.NET与设计模式》学习(一)
  2. 第十天2017/04/21(2、泛型编程:模板 / 全特化、偏特化)
  3. 28岁以后,我不抱大腿,我就是大腿
  4. 记录一下ui设计中的网站配色
  5. PyTorch教程(八):常见激活函数与Loss的梯度
  6. Nginx server_name精确匹配配置
  7. 彻底搞懂 python 中文乱码问题_彻底搞懂 Python 编码 - sylan215的软件测试技术学习 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  8. 计算机网络属性设置方法,电脑本地连接的属性设置在哪里
  9. 兄弟连关于PHP培训的声明
  10. html5之websql深入理解
  11. 人工智能之AlphaBeta剪枝算法
  12. 人大金仓数据库Docker部署
  13. 后缀树 c++代码实现
  14. 两台电脑通过网线直连共享数据(超详细)
  15. PHP动态网站开发期末试卷,《PHP动态网站开发实例教程》课程考核方案
  16. linux部署qq机器人记录
  17. error: ‘stol’ was not declared in this scope
  18. 虾皮运营之不实折扣有多严重?堪比双十一 虾皮运营技巧
  19. java gui界面设计qq_Java swing界面开发(仿QQ登录界面)
  20. 马尔可夫决策过程(Markov Decision Process)学习笔记

热门文章

  1. 惠普战 66 2023评测 惠普战 66 2023参数配置
  2. pyTorch下载和cuda下载以及学习笔记
  3. 转发asp.net探针源码
  4. 惠普linux进入bios设置u盘启动,如何进入bios设置,详细教您惠普如何进入bios设置u盘启动...
  5. Springboot注解@Async不生效
  6. 手机显示获取服务器信息,获取手机服务器
  7. max open files mysql_arch-linux – MySQL max_open_files超过1024
  8. 我,32岁,土木工程人,终于转行了
  9. 计算机硬盘是内存储器还是外存储器,计算机的内存储器比外存储器很多朋友觉得自己攒机是一件麻烦的事...
  10. 【BZOJ2085】【POI2010】—Hamsters(哈希+矩阵快速幂)