面试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 小时前
2026Java 后端面试完整版|八股简答 + AI 大模型集成技术(最新趋势)
人工智能·面试·职场和发展
圣保罗的大教堂3 小时前
leetcode 1855. 下标对中的最大距离 中等
leetcode
拾贰_C5 小时前
【Agent | openai | Streaming | 】流式输出Streaming
ubuntu·面试·prompt
Moment6 小时前
面试官:给 llm 传递上下文,有哪几个身份 role ❓❓❓
前端·后端·面试
木斯佳7 小时前
前端八股文面经大全:字节抖音前端三面(2026-04-27)·面经深度解析
前端·面试·笔试·八股·面经
脱氧核糖核酸__7 小时前
LeetCode热题100——234.回文链表(两种解法)
c++·算法·leetcode·链表
愚者游世7 小时前
noexcept 说明符与 noexcept运算符各版本异同
开发语言·c++·程序人生·面试·visual studio
penngo8 小时前
# 使用Claude Code开发植物大战僵尸游戏(pygame,附源码)
python·游戏·pygame
生信研究猿8 小时前
leetcode 416. 分割等和子集
算法·leetcode·职场和发展
深念Y8 小时前
Denuvo加密被全面攻破?聊聊D加密原理和这次的破解事件
人工智能·游戏·ai·逆向·虚拟机·虚拟·d加密