leetcode289 生命遊戲

2022-05-20 11:27:52 字數 1615 閱讀 4113

年發明的細胞自動機

給定乙個包含 m × n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞都具有乙個初始狀態:

1 即為活細胞(live),或 0

即為死細胞(dead)。每個細胞與其八個相鄰位置(水平,垂直,對角線)的細胞都遵循以下四條生存定律:

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

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

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

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

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

示例:輸入:

[  [

0,1,0

],  [

0,0,1

],  [

1,1,1

],  [

0,0,0]]

輸出:[

[0,0,0

],  [

1,0,1

],  [

0,1,1

],  [

0,1,0]]

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

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

思路:自己的**:

class

solution ;

int dy[8] = ;

void gameoflife(vectorint>>&board)

if(board[tx][ty] == 1

)

}if(count < 2||count > 3) res[i][j] =0

;

else

if(count == 3) res[i][j] =1

;

else res[i][j] =board[i][j];}}

board =res;

return

; }

};

更改後:

思路:通過原第一位不斷轉換第二位,最後輸出第二位。

class

solution ;

int dy[8] = ;

void gameoflife(vectorint>>&board)

if(board[tx][ty] >= 1

)

}if((board[i][j]&1) >0

)

}else

if(count == 3

) board[i][j] =0b10;}}

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

}return

; }

};

leetcode 289 生命遊戲

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

Leetcode 289 生命遊戲

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

LeetCode 289 生命遊戲

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