給定乙個包含 m × n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞都具有乙個初始狀態:1 即為活細胞(live),或 0 即為死細胞(dead)。每個細胞與其八個相鄰位置(水平,垂直,對角線)的細胞都遵循以下四條生存定律:
如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡;
如果活細胞周圍八個位置有兩個或三個活細胞,則該位置活細胞仍然存活;
如果活細胞周圍八個位置有超過三個活細胞,則該位置活細胞死亡;
如果死細胞周圍正好有三個活細胞,則該位置死細胞復活;
下乙個狀態是通過將上述規則同時應用於當前狀態下的每個細胞所形成的,其中細胞的出生和死亡是同時發生的。給你 m x n 網格面板 board 的當前狀態,返回下乙個狀態。
示例 1:
輸入:board = [[0,1,0],[0,0,1],[1,1,1],[0,0,0]]
輸出:[[0,0,0],[1,0,1],[0,1,1],[0,1,0]]
示例 2:
輸入:board = [[1,1],[1,0]]
輸出:[[1,1],[1,1]]
from typing import list
import math
import copy
class solution:
def gameoflife(self, board: list[list[int]]) -> none:
"""do not return anything, modify board in-place instead.
"""boardcopy=copy.deepcopy(board)
neighbors = [(1,0), (1,-1), (0,-1), (-1,-1), (-1,0), (-1,1), (0,1), (1,1)]
rows=len(board)
columns=len(board[0])
for i in range(rows):
for j in range(columns):
live=0
for x in neighbors:
if 0<=i+x[0]3):
board[i][j]=0
if boardcopy[i][j]==0 and live==3:
board[i][j]=1
#原地修改
class solution:
def gameoflife(self, board: list[list[int]]) -> none:
"""do not return anything, modify board in-place instead.
"""rows=len(board)
columns=len(board[0])
directions=[(1,0),(-1,0),(0,1),(0,-1),(-1,-1),(-1,1),(1,-1),(1,1)]
dd=for i in range(rows):
for j in range(columns):
live=0
for d in directions:
if 0<=i+d[0]3) and (board[i][j]==1 or board[i][j]=='01'):
board[i][j]='10'
if live==3 and (board[i][j]==0 or board[i][j]=='10'):
board[i][j]='01'
for i in range(rows):
for j in range(columns):
board[i][j]=dd[board[i][j]]
leetcode 289 生命遊戲
給定乙個包含 m n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞具有乙個初始狀態 live 1 即為活細胞,或 dead 0 即為死細胞。每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞周...
Leetcode 289 生命遊戲
給定乙個包含 m n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞具有乙個初始狀態 live 1 即為活細胞,或 dead 0 即為死細胞。每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞周...
LeetCode 289 生命遊戲
給定乙個包含 m n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞具有乙個初始狀態 live 1 即為活細胞,或 dead 0 即為死細胞。每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 根據當前狀態,寫乙個函式來計算面板上細胞的下乙個 一次更新後的 狀態。下乙...