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