【LeetCode】289.生命游戏

ops/2024/9/23 16:51:22/

如何原地对数组进行修改是比较困难的,递归的算法无法做到。那有什么方式能简化吗?可以设计多种数字用于记录细胞的状态,不同的数字记录了不同的时刻和状态,从而简化了题目。

1.题目

在这里插入图片描述

2.思想

本题题意虽然比较复杂,但是还是属于比较简单的一道题。有两种思路可以解:

  • copy一个一模一样的数组,然后挨个计算条件,将结果放到原数组中。
  • 更改状态。
    说实话,第二种思想真的是很有意思。时刻分成两种:现在和未来;状态分成“死”或者“活”。所以就可以得到下面这张图:
    在这里插入图片描述
    根据设计的思路就可以得到下面这个代码。

3.代码

class Solution:def gameOfLife(self, board: List[List[int]]) -> None:"""Do not return anything, modify board in-place instead."""m = len(board)n = len(board[0])for i in range(m):for j in range(n):alive_cnt = self.getNum(i,j,m,n,board)# 现在是活的,后面死了if alive_cnt < 2 and board[i][j] == 1: # 条件1board[i][j] = 4 elif alive_cnt == 2 and board[i][j] == 1: # 条件2-1board[i][j] = 5elif alive_cnt == 3 and board[i][j] == 1: # 条件2-2board[i][j] = 5                                elif alive_cnt > 3 and board[i][j] == 1:# 条件3board[i][j] = 4elif alive_cnt == 3 and board[i][j] == 0:# 条件3board[i][j] = 3# print(board)for i in range(m):for j in range(n):board[i][j] %= 2# 返回活着的细胞个数# m行n列def getNum(self,x,y,m,n,board):alive_cnt = 0a = [[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]]for i in a:new_x, new_y = x+i[0], y+i[1]if 0<=new_x<m and 0<=new_y <n:# 要看之前的状态if board[new_x][new_y] == 1 or board[new_x][new_y] == 4 or board[new_x][new_y] == 5:alive_cnt+=1                return alive_cnt

http://www.ppmy.cn/ops/114865.html

相关文章

【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;上&#xff09; 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;下&#xff09; 文章目录 系列文章目录前言一、ArkTS基本介绍1、 ArkTS组成2、组件参数和属性2.1、区…

【BetterBench博士】2024年华为杯E题:高速公路应急车道紧急启用模型 Python代码实现

题目 【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析 【BetterBench博士】2024年中国研究生数学建模竞赛 E题&#xff1a;高速公路应急车道紧急启用模型 问题分析 【BetterBench博士】2024年中国研究生数学建模竞赛 C题&#xff1a;数据驱动…

Linux Kernel Makefiles 编译标志详解

在Linux内核开发中&#xff0c;Makefile文件扮演着至关重要的角色&#xff0c;它指导make命令如何编译和链接内核源代码。Makefile中包含了多种编译标志&#xff08;flags&#xff09;&#xff0c;这些标志控制着编译、汇编和链接过程的不同方面。本文将详细介绍几种关键的编译…

1. ZYNQ 2. MPSOC 3. FPGA 4. Vitis 5. 项目

### 1. 建立Vitis SDK自带的Hello World工程 首先&#xff0c;我们需要在Vitis SDK中创建一个基本的Hello World工程。这是学习FPGA开发和ZYNQ MPSOC平台的重要第一步。Hello World工程的主要目的是验证开发环境的正确性以及熟悉基本的编程流程。 #### 步骤&#xff1a; - 打开…

系统架构设计师 大数据架构篇一

&#x1f310;大数据架构 大数据处理系统分析 &#x1f50d; 大数据处理系统三大挑战 &#x1f680; 非结构化数据处理&#xff1a;如何处理非结构化和半结构化数据。复杂性与不确定性&#xff1a;大数据复杂性、不确定性特征描述的刻画方法和大数据的系统建模。异构性影响&…

Java中的事件(动作监听-ActionListener)

&#xff08;一&#xff09;、ActionListener接口 ActionListener接口用于处理用户界面上的动作事件&#xff0c;例如&#xff1a;按钮点击、菜单选择等。实现ActionListener接口需要重写actionPerformed(ActionEvent e)方法&#xff0c;该方法会在动作发生时被调用。 &#…

数据库基础知识---------------------------(3)

MYSQL的索引 用于快速找出在某个列中有一特定值的行&#xff0c;不使用索引&#xff0c;MySQL必须从第一条记录开始读完整个表&#xff0c;直到找出相关的行。按实现方式分为Hash索引和BTree索引 单列索引 普通索引 允许在定义索引的列中插入重复值和空值唯一索引 索引列的值必…

如何选购笔记本电脑?要看哪些参数?

如何选购笔记本电脑&#xff1f;要看哪些参数&#xff1f; 文章目录 如何选购笔记本电脑&#xff1f;要看哪些参数&#xff1f;1、CPU&#xff08;中央处理器&#xff09;2、GPU&#xff08;显卡&#xff09;3、RAM&#xff08;内存&#xff09;4、硬盘5、屏幕6、散热7、接口8、…