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;
}
}
}
}
}
Leetcode--289. 生命游戏相关推荐
- LeetCode 289. 生命游戏(位运算)
文章目录 1. 题目 2. 解题 2.1 复制数组解法 2.2 原地解法 2.3 位运算 1. 题目 链接:289. 生命游戏 2. 解题 2.1 复制数组解法 很简单,按照题意模拟即可 class ...
- LeetCode 289. 生命游戏
289. 生命游戏 思路:数每个格子周围Cell存活数 笔记:vector复制 vector<vector<int> > tmp(board); class Solution ...
- [leetcode][289. 生命游戏]
根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初始状态 liv ...
- c语言 细胞自动机,Leetcode 289. 生命游戏 (细胞自动机)
二维网格遍历注意使用技巧让代码可读性强. 原始的思路是使用一个二维数组进行更新,当全部更新完以后,复制这个二维数组到原来的数组上. 可不可以优化,不使用额外的空间,答案是可以的 细胞的状态如下: ...
- 【leetcode】289.生命游戏 (三种解法开阔思路,java实现)
289. 生命游戏 难度中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个 ...
- LeetCode 0289. 生命游戏
[LetMeFly]289.生命游戏 力扣题目链接:https://leetcode.cn/problems/game-of-life/ 根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约 ...
- 289. 生命游戏。
根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞都具有一 ...
- leetcode 289. Game of Life | 289. 生命游戏(Java)
题目 https://leetcode.com/problems/game-of-life/ 题解 首先,遍历整个棋盘,如果是 1,就将上下左右的 count 值加 1. 然后,没有任何技巧,就是根据 ...
- Leetcode 289:生命游戏(最详细的解法!!!)
根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初始状态 liv ...
- [Leetcode] 第289题 生命游戏
一.题目描述 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初 ...
最新文章
- AgileEAS.NET平台之ORM设计器
- Java之socket编程
- linux开发板加快开机速度,readahead加速Linux开机速度
- 链接聚合是将一组物理接口_如何增加带宽,提升网络可靠性?
- jQuery插件开发全解析(转)
- 2015Mac版飞秋无法接受文件夹!!!
- 企业IT架构转型之道 阿里巴巴中台战略思想与架构实战
- 怎么用计算机直接截图,电脑截图快捷键怎么使用,电脑怎么快捷键截图
- datamodeler mysql_Navicat Data Modeler功能简介
- Android 9 隐藏下拉状态栏中的快捷开关
- 典型IO模型----阻塞IO,非阻塞IO,信号驱动IO,异步IO
- matlab画条状图,使用Matlab画条形图
- 为什么 50 欧姆成为了射频传输线的阻抗标准
- 分布式监控工具zabbix 配置安装
- 人工智能数学基础-内积和外积
- linux怎么下载安装软件
- AutoHotKey写一个改键的小脚本
- python打开csv忽略错误_在python中读取错误的格式csv
- vue校验密码的三种写法
- 专有钉钉 浙政钉 前端 对接流程(小程序)
热门文章
- LeetCode 399. 除法求值(图的DFS搜索)
- 数据结构--单链表single linked list数据结构C++实现
- PHP ajax 传递中文乱码,ajax+php传递中文乱码解决办法
- windows键按了没反应_windows快捷键使用 - 小怜
- 【机器学习-数据科学】第三节:数据分析实例 分析MovieLens电影数据
- Cygwin中如何像在Ubuntu中一样安装软件
- 奇数阶幻方 java_N(奇数)阶幻方-java实现代码
- 论文浅尝 | 利用开放域触发器知识改进事件检测
- docker挂载文件躺过的坑
- Android官方开发文档Training系列课程中文版:调用相机之控制相机