面试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表示原来是活的,下一个状态要变成死

相关推荐
wanhengidc10 小时前
云手机与云服务器之间的关系
服务器·游戏·智能手机·云计算·区块链
sheepfagdng10 小时前
求职专栏-【面试-自我介绍】
面试·职场和发展
喝杯牛奶丶11 小时前
MySQL隔离级别:大厂为何偏爱RC?
java·数据库·mysql·面试
Sherry00712 小时前
【译】🔥如何居中一个 Div?看这篇就够了
前端·css·面试
被AI抢饭碗的人12 小时前
算法题(254):灾后重建
算法·leetcode·职场和发展
音符犹如代码13 小时前
ArrayList常见面试题二
java·开发语言·面试·职场和发展
绝无仅有15 小时前
大厂深度面试相关文章:深入探讨底层原理与高性能优化
后端·面试·架构
绝无仅有15 小时前
大厂真实面试指南:解答核心问题与技术深度探讨
后端·面试·架构
yoke菜籽1 天前
面试150——字典树
面试·职场和发展
Kuo-Teng1 天前
Leetcode438. 找到字符串中所有字母异位词
java·算法·leetcode