题意
给定一个n*m的网格,每个单元都有一个细胞,每个细胞具有初始状态活(1)或死(0)。每个细胞使用以下四条规则与其八个邻居(水平,垂直,对角线)交互作用:
任何少于两个活着的邻居的活细胞都会死亡。
任何有两三个活着的邻居的活细胞都会继续存活。
任何有三个以上活着的邻居的活细胞都会死亡。
具有三个活的邻居的死细胞都会变成一个活细胞。
任根据当前状态写一个函数来计算板的下一个状态(一次更新后)。
代码
class Solution:
def gameOfLife(self, board):
"""
:type board: List[List[int]]
:rtype: void Do not return anything, modify board in-place instead.
"""
dx=[-1,1,-1,1,-1,0,1,0]
dy=[-1,1,1,-1,0,1,0,-1]
row=len(board)
col=len(board[0])
upd=[]
for i in range(row):
upd.append([])
for j in range(col):
upd[i].append(board[i][j])
nei_live=0
for k in range(8):
x=i+dx[k]
y=j+dy[k]
if x>=0 and x<row and y>=0 and y<col:
if board[x][y]==1:
nei_live+=1
if board[i][j]==1:
if nei_live<2 or nei_live>3:
upd[i][j]=0
else:
upd[i][j]=1
else:
if nei_live==3:
upd[i][j]=1
else:
upd[i][j]=0
for i in range(row):
for j in range(col):
board[i][j]=upd[i][j]
解题思路
就是模拟,注意python二维数组的用法