LeetCode 289 生命遊戲

2021-09-13 14:27:04 字數 2173 閱讀 7491

給定乙個包含 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]

]高階:

你可以使用原地演算法解決本題嗎?請注意,面板上所有格仔需要同時被更新:你不能先更新某些格仔,然後使用它們的更新後的值再更新其他格仔。

本題中,我們使用二維陣列來表示面板。原則上,面板是無限的,但當活細胞侵占了面板邊界時會造成問題。你將如何解決這些問題?

參考網友解題思路

原地演算法使用原地演算法,一般就會牽涉到編譯碼問題。(第一次遇到編碼解碼方法做題目,特此記錄)題目意思是說:

< 2 live ->dead

2 or 3 live->live

3 live->dead

3 dead->live

所以,統計八個方位的存活細胞數目(原地更新):

死細胞,周圍存活細胞數=3,復活dead->live。

活細胞,周圍存活細胞數<2 or >3,死掉live->dead。

但是原地更新,肯定不能用0和1更新board[ ][ ],因為會破會下一次迴圈計算。

可以使用3表示由死變活3—活(解碼時,3用1替換)

可以使用2表示由活變死2—死(解碼時,2用0替換)

所以,board[ ] [ ]中1和3都是live,0和2都是dead。那麼,每次最末尾的時候都需要一次解碼過程,也就是將3->1和2->0才符合題意。

class solution 

//右上

if(i - 1 >= 0 && j + 1 < col && (board[i - 1][j + 1] == 1 || board[i - 1][j + 1] == 2))

//右if(j + 1 < col && (board[i][j + 1] == 1 || board[i][j + 1] == 2))

//右下

if(i + 1 < row && j + 1 < col && (board[i + 1][j + 1] == 1|| board[i + 1][j + 1] == 2))

//下if(i + 1 < row && (board[i + 1][j] == 1 || board[i + 1][j] == 2))

//左下

if(i + 1 < row && j - 1 >= 0 && (board[i + 1][j - 1] == 1 || board[i + 1][j - 1] == 2))

//左if(j - 1 >= 0 && (board[i][j - 1] == 1 || board[i][j - 1] == 2))

//左上

if(j - 1 >= 0 && i - 1 >= 0 && (board[i - 1][j - 1] == 1 || board[i - 1][j - 1] == 2))

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

//更新--

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

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

if(board[i][j] == 1)}}

}//1和3--live 0和2---dead

//解碼---還原為0和1

for(int i = 0; i < row; 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 即為死細胞。每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞周...