LeetCode 289 生命遊戲

2021-09-19 12:04:57 字數 1237 閱讀 8924

給定乙個包含 m × n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞具有乙個初始狀態 live(1)即為活細胞, 或 dead(0)即為死細胞。每個細胞與其八個相鄰位置(水平,垂直,對角線)的細胞都遵循以下四條生存定律:

如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡;

如果活細胞周圍八個位置有兩個或三個活細胞,則該位置活細胞仍然存活;

如果活細胞周圍八個位置有超過三個活細胞,則該位置活細胞死亡;

如果死細胞周圍正好有三個活細胞,則該位置死細胞復活;

根據當前狀態,寫乙個函式來計算面板上細胞的下乙個(一次更新後的)狀態。下乙個狀態是通過將上述規則同時應用於當前狀態下的每個細胞所形成的,其中細胞的出生和死亡是同時發生的。

示例:

輸入:[

[0,1,0],

[0,0,1],

[1,1,1],

[0,0,0]

]輸出:[

[0,0,0],

[1,0,1],

[0,1,1],

[0,1,0]

]

高階:

此題用狀態機來實現常數空間複雜度。定義四種狀態:狀態0:死細胞轉為死細胞;狀態1:活細胞轉為活細胞;狀態2:活細胞轉為死細胞;狀態3:死細胞轉為活細胞。這樣我們就可以在任何時刻知道任何細胞的初始狀態了。我們遍歷二維陣列的每乙個細胞,判斷當前細胞的周圍8個細胞的初始狀態,當某周圍細胞的狀態是1或2時,它的初始狀態一定是活細胞,於是用變數count儲存周圍8個細胞中初始狀態為活細胞的數量。於是我們便可以利用count和當前細胞的狀態,更新當前細胞的狀態。當二維陣列所有細胞狀態都更新完畢後,要將所有細胞的狀態從狀態機的四個狀態恢復成0,1的兩個狀態,於是將它們的狀態對2求餘,所得的數就是它們現在應該的狀態0或者1了。

class solution ;

int dy = ;

for(int i = 0; i < m; i++)

if(board[i][j] == 0 && count == 3)

board[i][j] = 3;

else if(board[i][j] == 1 && (count < 2 || count > 3))

board[i][j] = 2;}}

for(int i = 0; i < m; i++)}}

};

leetcode 289 生命遊戲

給定乙個包含 m n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞具有乙個初始狀態 live 1 即為活細胞,或 dead 0 即為死細胞。每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞周...

Leetcode 289 生命遊戲

給定乙個包含 m n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞具有乙個初始狀態 live 1 即為活細胞,或 dead 0 即為死細胞。每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞周...

LeetCode 289 生命遊戲

給定乙個包含 m n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞具有乙個初始狀態 live 1 即為活細胞,或 dead 0 即為死細胞。每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 根據當前狀態,寫乙個函式來計算面板上細胞的下乙個 一次更新後的 狀態。下乙...