題意
給定一個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二維數組的用法