LeetCode289 生命游戏(模拟)

LeetCode289 生命游戏

使用扩展标签保留更新之前的信息

这里原来是0,现在是1,标记为2;原来是1,现在是0,标记为-1。保留本轮更新之前的值

最后在遍历更新为0或1

class Solution:
    def gameOfLife(self, board: List[List[int]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        direction = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]
        m, n = len(board), len(board[0])

        def count_live(x, y):
            count = 0
            for to_x, to_y in direction:
                cur_x, cur_y = x + to_x, y + to_y
                if cur_x >= 0 and cur_x < m and cur_y >= 0 and cur_y < n:
                    if (board[cur_x][cur_y] == 1 or board[cur_x][cur_y] == -1): count += 1
            
            return count

        def count_dead(x, y):
            count = 0
            for to_x, to_y in direction:
                cur_x, cur_y = x + to_x, y + to_y
                if cur_x >= 0 and cur_x < m and cur_y >= 0 and cur_y < n:
                    if (board[cur_x][cur_y] == 0 or board[cur_x][cur_y] == 2): count += 1
            
            return count
        
        for i in range(m):
            for j in range(n):
                if board[i][j] == 0 and count_live(i, j) == 3: board[i][j] = 2
                elif board[i][j] == 1 and (count_live(i, j) < 2 or count_live(i, j) > 3): board[i][j] = -1
        
        for i in range(m):
            for j in range(n):
                if board[i][j] == 0 or board[i][j] == -1: board[i][j] = 0
                elif board[i][j] == 1 or board[i][j] == 2: board[i][j] = 1

posted on 2022-07-05 12:17  solvit  阅读(40)  评论(0编辑  收藏  举报

导航