生命游戏

LeetCode 289. 生命游戏

一世执手 提交于 2020-04-02 18:30:16
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 289. 生命游戏 题目 根据 百度百科 , 生命游戏 ,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律: 如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡; 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活; 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡; 如果死细胞周围正好有三个活细胞,则该位置死细胞复活; 根据当前状态,写一个函数来计算面板上所有细胞的下一个(一次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。 示例: 输入: [ [0,1,0], [0,0,1], [1,1,1], [0,0,0] ] 输出: [ [0,0,0], [1,0,1], [0,1,1],

leetcode【高级】生命游戏 Java

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-27 06:53:54
题干 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在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 ] ] 进阶: 你可以使用原地算法解决本题吗?请注意,面板上所有格子需要同时被更新:你不能先更新某些格子,然后使用它们的更新后的值再更新其他格子。 本题中

康威生命游戏———孤独会致命,拥挤也一样(转载)

廉价感情. 提交于 2019-12-05 07:39:06
好奇于什么是gliter,搜到一篇好文,转载自 https://www.douban.com/note/690728776/ 康威生命游戏——孤独会致命,拥挤也一样 (图源:blog.stephenwolfram.com) 英国Atkins建筑事务所设计的剑桥北站于2017年5月落成,它的表皮引起了一场小波澜。原因在于它使用了数学家熟悉的Rule 30图案(黑白反转并旋转了45°),而这一图案是剑桥大学的竞争对手牛津大学的校友史蒂芬·沃尔夫勒姆(Stephen Wolfram)创造的。但建筑师解释,它实际上是剑桥校友约翰·康威(John Conway)的生命游戏规则衍生的几个著名图案之一。 这事也吸引了图案原创者沃尔夫勒姆本人的注意,他专门写了篇长文介绍这些图案,上图就是这篇文章里的。 让我们抛开剑桥、牛津之争,回到这一图形的源头, 康威生命游戏 。 (图源:i.guim.co.uk) 约翰·康威全名John Horton Conway,1937年12月26日出生于英国利物浦。 他少时便对数学感兴趣,后来进入剑桥大学攻读数学专业,终于如愿以偿成了数学家。他活跃于有限群的研究、趣味数学、纽结理论、数论、组合博弈论和编码学等范畴。 Game of Life 约翰·康威最常被专业人士和大众拿来讨论的成果,就是他在1970年发明的 生命游戏,Game of Life

LeetCode 289. 生命游戏

匿名 (未验证) 提交于 2019-12-03 00:21:02
根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰・何顿・康威在1970年发明的细胞自动机。 live dead (0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律: 1. 如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡; 2. 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活; 3. 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡; 4. 如果死细胞周围正好有三个活细胞,则该位置死细胞复活; 根据当前状态,写一个函数来计算面板上细胞的下一个(一次更新后的)状态。 进阶: 你可以使用原地算法解题吗?请记住,面板上所有格子需要同时被更新:你不能先更新某些格子,然后使用它们的更新后的值更新其他格子。 在此题中,我们使用二维数组来表示面板。原则上,面板是无限的,但当活细胞侵占了面板边界时会造成问题。你将如何解决这些问题? 细节: 当一个格子更新后该格子状态可能改变,所以再声明一个vector二维数组存放格子的信息,运行完毕后把这个数组赋值给board即可。 思路: 枚举每个格子,通过条件判断这个细胞是死还是活,判断可通过一个二维数组Walk遍历周围8个格子 #include <iostream> #include <vector> #include <list> using namespace

LeetCode#289.生命游戏

不问归期 提交于 2019-12-02 02:32:36
生命游戏:根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态 live(1)即为活细胞, 或 dead(0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律: 如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡; 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活; 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡; 如果死细胞周围正好有三个活细胞,则该位置死细胞复活; 根据当前状态,写一个函数来计算面板上细胞的下一个(一次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/game-of-life 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解法:先用不同的值来表示不同的变化,然后再替换即可 class Solution { public: void gameOfLife(vector<vector<int>>& board) { /* 先采用标记的方法

LeetCode 289 - 生命游戏 - 原地算法

浪子不回头ぞ 提交于 2019-11-28 01:37:51
Wikipedia关于原地算法的描述: 原地算法(in-place algorithm) 基本上 不需要额外辅助的数据结构 ,然而, 允许少量额外的辅助变量 来转换数据的算法。当算法运行时, 输入的数据通常会被要输出的部分覆盖掉 。 很容易看出,原地算法的特点是 不需要辅助的数据结构而只需要辅助变量。 通常,维护一个复杂的数据结构时间空间复杂度都是比较高的,原地算法的优越性正来自于不依赖数据结构,尽管它借鉴了数据结构的思想。 同时也不难看出,原地算法总体的实现思路就是 用输出的数据在原地覆盖已经“没用”的输入的数据 。 先做的是一条简单题: LeetCode 1047 删除字符串中所有相邻重复项 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例: 输入:"abbaca" 输出:"ca" 解释: 例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。 方法一: 最容易想到的就是维护一个栈,因为本题删除字符的操作具有即时性。可以理解为“从第一个字符开始读字符串