• 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
    
  • 相关阅读:
    【Linux】没有网的情况下如何安装GCC
    【PL/SQL】PLSQL Developer注册码
    【JS】字符串操作
    【java】svn显示&#215;
    线段树
    病毒感染者
    并查集
    最小的N个和(堆)
    priority_queue的用法
    打印杨辉三角
  • 原文地址:https://www.cnblogs.com/solvit/p/16445965.html
Copyright © 2020-2023  润新知