LeetCode—289. 生命游戏

289. 生命游戏

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

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

如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;
如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;
如果死细胞周围正好有三个活细胞,则该位置死细胞复活;
下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。给你 m x n 网格面板 board 的当前状态,返回下一个状态。
希望在原地数组解决问题
在这里插入图片描述
考察重点:在原矩阵基础上,原地将矩阵每个位置,根据该点周围8个点的原矩阵值转换为新值。使用way数组代替走的方向,从上至下从左至右依次遍历。oneNum记录活细胞个数,board[x][y]=2记录本轮复活的元素,3记录本轮死亡的元素;在递归完成,回溯的时候,再将二者转化为0,1。

var way [][]int = [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}}func dfs(board [][]int, x, y int) {oneNum := 0xLen, yLen := len(board), len(board[0])if y >= yLen {if x < xLen-1 {x, y = x+1, 0} else {return}}for i := 0; i < len(way); i++ {tempx := x + way[i][0]tempy := y + way[i][1]if tempx >= xLen || tempx < 0 || tempy >= yLen || tempy < 0 {continue}switch board[tempx][tempy] {case 1:oneNum++case 2:continuecase 0:continuecase 3:oneNum++}}if board[x][y] == 1 {if oneNum < 2 {board[x][y] = 3} else if oneNum <= 3 {board[x][y] = 1} else {board[x][y] = 3}} else {if oneNum == 3 {board[x][y] = 2} else {board[x][y] = 0}}dfs(board, x, y+1)if board[x][y] == 3{board[x][y] = 0}else if board[x][y] == 2{board[x][y] = 1}
}
func gameOfLife(board [][]int) {dfs(board, 0, 0)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java注解的基本概念和原理及其简单实用

一、注解的基本概念和原理及其简单实用 注解&#xff08;Annotation&#xff09;提供了一种安全的类似注释的机制&#xff0c;为我们在代码中添加信息提供了一种形式化得方法&#xff0c;使我们可以在稍后某个时刻方便的使用这些数据&#xff08;通过解析注解来使用这些数据&am…

js事件传参

阻止事件发生之前就执行了函数 除了创建匿名函数 function foo(a){console.log(a); } document.οnclickfoo(1) //document.οnclickfunction(){foo(1)}// document.addEventListener(click,foo(1),false)另外有bind() function foo(a){console.log(a); } document.οnclickfoo…

cin、cin.get()、cin.getline()、getline()、gets()等函数的用法(转)

学C的时候&#xff0c;这几个输入函数弄的有点迷糊&#xff1b;这里做个小结&#xff0c;为了自己复习&#xff0c;也希望对后来者能有所帮助&#xff0c;如果有差错的地方还请各位多多指教&#xff08;本文所有程序均通过VC 6.0运行&#xff09;转载请保留作者信息&#xff1b…

LeetCode—295. 数据流的中位数(困难)

295. 数据流的中位数&#xff08;困难&#xff09; 题目描述&#xff1a; 中位数是有序列表中间的数。如果列表长度是偶数&#xff0c;中位数则是中间两个数的平均值。 例如&#xff0c; [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 3) / 2 2.5 设计一个支持以下两种操作的数…

Atlas Samples Suse Linux 10.1

http://asyncpostback.com/ 这是一个展示Altas的相关Features的例子网站,网站的所有例子都有代码,是学习Altas的绝好教程Novell 发布了 SUSE Linux 10.1. 这个版本包含完整的Mono 开发环境和许多基于Mono的桌面应用. 对于专注于.net开发的你非常有必要来了解Mono.因为Mono的支持…

sudo apt-get update 与 sudo apt-get upgrate 的区别

1.sudo gedit /etc/apt/sources.list 源列表里面放置的一行行网址&#xff0c;在这个文件里加入或者注释&#xff08;加#&#xff09;掉一些源后&#xff0c;保存。这时候&#xff0c;我们的源列表里指向的软件就会增加或减少一部分 2. sudo apt-get update 这个命令&#xff…

oracle索引建立

1、明确地创建索引create index index_name on table_name(field_name)tablespace tablespace_namepctfree 5initrans 2maxtrans 255storage(minextents 1maxextents 16382pctincrease 0);2、创建基于函数的索引常用与UPPER、LOWER、TO_CHAR(date)等函数分类上&#xff0c;例&a…

android 中使用AsyncTask实现简单的异步编程

在开发移动客户端的时候往往要使用多线程来进行操作&#xff0c;我们通常会将耗时的操作放在单独的线程执行&#xff0c;避免其占用主线程而给用户带来不好的用户体验。但是在子线程中无法去操作主线程&#xff08;UI 线程&#xff09;&#xff0c;在子线程中操作UI线程会出现错…

网页制作秘招

第一招&#xff1a;有些主页&#xff0c;若把鼠标指向某个链接&#xff0c;在状态栏会出现该链接的说明&#xff0c;是不是会感觉很方便&#xff1f;其实这不难做到&#xff0c;只要在链接语句中加入以下的内容&#xff0c;就可以实现了&#xff01;试试看&#xff01;〈HTML〉…

LeetCode—52. N皇后 II(困难)

52. N皇后 II&#xff08;困难&#xff09; 题目描述&#xff1a; n 皇后问题研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。即令其中任意两个皇后都不同列、同行和在一条斜线上。 给你一个整数 n &#xff0c;返回 n 皇后问题不…

win10 子系统 ubuntu 16.04 安装 docker

2&#xff0c;更新系统软件 $ sudo apt-get update 3&#xff0c;安装依赖包 $ sudo apt-get install \apt-transport-https \ca-certificates \curl \software-properties-common 4&#xff0c;添加官方密钥 执行该命令时&#xff0c;如遇到长时间没有响应说明网络连接不到doc…

解析 Page.MaintainScrollPositionOnPostBack 属性

ASP.NET 的页面执行 PostBack 动作时&#xff0c;页面由伺服端重新传给客户端&#xff0c;而页面的垂直滚动条会跳回最上方&#xff0c;水平滚动条会跳回最左方。为了解决此情形&#xff0c;只要将 Page 的MaintainScrollPositionOnPostBack 属性设为True 时&#xff0c;页面就…

创建WebPart时的数据库连接问题。

ASP.NET加入的WebPart功能确实令人眼前一亮&#xff0c;问题如下&#xff1a;当我拖动一个WebPartManager到页面后&#xff0c;编译运行&#xff0c;竟然出现如下错误&#xff1a; 引用 “/WebSite1”应用程序中的服务器错误。 ----------------------------------------------…

Java创建大小顶堆

——实现模拟的大小顶堆&#xff08;优先队列与TreeMap&#xff09; 以Java中可自排序的数据结构&#xff0c;实现加入元素后&#xff0c;堆顶保持最大/最小 优先队列 ​ PriorityQueue是优先队列&#xff0c;作用是保证每次取出的元素都是队列中权值最小的&#xff0c;这里…

strcpy函数的实现

大家一般觉得名不见经传strcpy函数实现不是非常难&#xff0c;流行的strcpy函数写法是&#xff1a; char *my_strcpy(char *dst,const char *src) {assert(dst ! NULL);assert(src ! NULL);char *ret dst;while((* dst * src) ! \0) ;return ret; }假设注意到&#xff1a; 1&…

Maven 3-Maven依赖版本冲突的分析及解决小结

摘自&#xff1a; https://www.cnblogs.com/aspirant/p/8532962.html 举例A依赖于B及C&#xff0c;而B又依赖于X、Y&#xff0c;而C依赖于X、M&#xff0c;则A除引B及C的依赖包下&#xff0c;还会引入X&#xff0c;Y&#xff0c;M的依赖包&#xff08;一般情况下了&#xff0c;…

阮一峰:jQuery官方基础教程笔记

原文地址&#xff1a;http://www.jobbole.com/entry.php/1151 jQuery是目前使用最广泛的javascript函数库。  据统计&#xff0c;全世界排名前100万的网站&#xff0c;有46%使用jQuery&#xff0c;远远超过其他库。微软公司甚至把jQuery作为他们的官方库。  对于网页开发者…

LeetCode—297. 二叉树的序列化与反序列化(困难)

297. 二叉树的序列化与反序列化&#xff08;困难&#xff09; 题目描述&#xff1a; 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;…

MIME类型不可小视

在完成一个在线播放模块的时候,遇到麻烦,使用一个空页面,采用流方式读取媒体文件,然后将此页面作为文件名赋给网页播放器的FileName属性.结果是常用流媒体格式的文件播放正常,类似于ram,avi,asf这些格式的文件不能播放,报出来的错误也是说文件不可识别.查看详细信息只给出一个标…

一个简单粗暴的前后端分离方案

项目背景 刚刚参加完一个项目&#xff0c;背景&#xff1a;后端是用java&#xff0c;后端服务已经开发的差不多了&#xff0c;现在要通过web的方式对外提供服务&#xff0c;也就是B/S架构。后端专注做业务逻辑&#xff0c;不想在后端做页面渲染的事情&#xff0c;只向前端提供数…