[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的个数
class Solution {
public:int Count(vector<vector<int>>& data,int w,int h,int x,int y){int result=0,tempx,tempy;for(int i=0;i<9;i++){tempx=x+i/3-1;tempy=y+i%3-1;if(tempx==x && tempy==y) continue;if(tempx<0 || tempx>=h) continue;if(tempy<0 || tempy>=w) continue;if (data[tempx][tempy] == 1) result++;}return result; }void gameOfLife(vector<vector<int>>& board) {int height=board.size();if (height==0) return;int width=board[0].size();int cnt=0;vector<vector<int>> newdata;for(int i=0;i<height;i++){vector<int> item(width,0);newdata.push_back(item);for(int j=0;j<width;j++){cnt=Count(board,width,height,i,j);if(board[i][j]==1){if(cnt<2||cnt>3) {newdata[i][j]=0;continue;}else {newdata[i][j]=1;continue;}}else{if(cnt==3) {newdata[i][j]=1;continue;}else {newdata[i][j]=0;continue;}}}}board.swap(newdata);}
};
[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 ...
- 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 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初 ...
最新文章
- R语言效用分析 ( 效能分析、Power analysis)确定样本量、假设检验与两类错误、pwr包进行效用分析 ( 效能分析、Power analysis)的常用函数列表
- QML与Qt C++ 交互机制探讨与总结
- MongoDB 小试牛刀
- 从Github开源项目《云阅》所学到的知识
- spring bean配置_在运行时交换出Spring Bean配置
- Python报错SyntaxError: (unicode error) ‘utf-8‘ codec can‘t decode byte 0xc5 in position 0: invalid
- 基线是什么意思_CAD都玩不溜,还好意思说自己搞工程的?
- Python读取IRIS数据集并转换为PaddlePaddle中使用的reader
- php毕设周记_毕设周记(一)
- latex表格实现换行
- sqlite3 error: database is locked
- 过去式和过去分词的不规则列表
- CAPI 初探及使用小结(4)
- MathType的下载和安装以及添加到word中
- 【10月月赛T9】射命丸文
- 常见C语言内存错误及对策
- ElasticSearch分页查询的3个坑
- python基础--thirteen
- 小程序基础开发(五):微信支付全套流程
- 关于我是如何自学Java,一个自学网站推荐How2j