面试150 生命游戏

思路

深度优先遍历的思路,对当前细胞八个方向进行遍历,统计存活的细胞,并通过标记修改board数组,如果细胞死亡则标记为-1,细胞复活标记为2。再次遍历数组,然后根据标记修改数组即可

python 复制代码
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])
        directions=[(-1,0),(0,-1),(0,1),(1,0),(1,1),(-1,1),(-1,-1),(1,-1)]

        def dfs(i,j):
            count=0
            for x,y in directions:
                new_x=x+i 
                new_y=y+j 
                if 0<=new_x<m and 0<=new_y<n and abs(board[new_x][new_y])==1:
                    count+=1
            return count

        for i in range(m):
            for j in range(n):
                live=dfs(i,j)
                if board[i][j]==1 and live<2:
                    board[i][j]=-1
                elif board[i][j]==1 and live>3:
                    board[i][j]=-1
                elif board[i][j]==0 and live==3:
                    board[i][j]=2
        for i in range(m):
            for j in range(n):
                if board[i][j]<0:
                    board[i][j]=0
                elif board[i][j]>0:
                    board[i][j]=1                

值得注意的是,abs(board[new_x][new_y])==1,是为了正确统计当前细胞的邻居原本是"活"的数量。因为在原地修改的时候-1表示原来是活的,下一个状态要变成死

相关推荐
编程岁月1 小时前
java面试-0136-BIO、NIO、AIO区别?
java·面试·nio
道可到2 小时前
35 岁程序员的绝地求生计划:你准备好了吗?
前端·后端·面试
道可到2 小时前
国内最难入职的 IT 公司排行:你敢挑战哪一家?
前端·后端·面试
bot5556662 小时前
企业微信iPad协议演进:从私有二进制到可扩展接口
面试
道可到2 小时前
程序员养生十大违章:你中了几条?
前端·后端·面试
这可不简单2 小时前
前端性能优化:从浏览器渲染原理到实战(告别 “知其然不知其所以然”)
前端·css·面试
wanhengidc2 小时前
云手机的挂机功能涉及到哪些内容
运维·服务器·网络·游戏·智能手机
渣哥3 小时前
多环境配置利器:@Profile 在 Spring 项目中的实战价值
javascript·后端·面试
飞哥的AI笔记3 小时前
热题解析:什么是Few-shot Learning?为什么给几个例子模型就能学会?
面试
南北是北北3 小时前
Handler线程模型与内存
面试