LeetCode 289 生命遊戲

2021-10-04 17:37:40 字數 2126 閱讀 6406

leetcode:289. 生命遊戲

示例:輸入:

[[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

if(i-

1>=

0&&j>=

0&&board[i-1]

[j]==1)

if(i-

1>=

0&&j+

1[j+1]==

1)if(j-

1>=

0&&board[i]

[j-1]==

1)if(j+

1[j+1]==

1)if(i+

11>=

0&&board[i+1]

[j-1]==

1)if(i+

1[j]==1)

if(i+

11[j+1]==

1)if(count<

2&&board[i]

[j]==1)

elseif(

(count==

2||count==3)

&&board[i]

[j]==1)

else

if(count>

3&&board[i]

[j]==1)

else

if(count==

3&&board[i]

[j]==0)

}}for(

int i=

0;i}}

;

官方

class

solution

;int rows = board.

size()

;int cols = board[0]

.size()

;// 建立複製陣列 copyboard

vectorint>

>

copyboard

(rows, vector<

int>

(cols,0)

);// 從原陣列複製乙份到 copyboard 中

for(

int row =

0; row < rows; row++)}

// 遍歷面板每乙個格仔裡的細胞

for(

int row =

0; row < rows; row++)}

}}// 規則 1 或規則 3 if(

(copyboard[row]

[col]==1

)&&(liveneighbors <

2|| liveneighbors >3)

)// 規則 4

if(copyboard[row]

[col]==0

&& liveneighbors ==3)

}}}}

;

第乙個就直接想到暴力法,在原陣列上進行修改會影響後面的值,所以引入了乙個新的陣列。

學會簡化遍歷二維陣列中某個點周圍8個點的方法。官方的更簡潔。

二維陣列八個點訪問方法

1.

const

int dx=

;const

int dy=

;// 獲取周圍的活細胞個數

int cnt =0;

for(

int i =

0; i <

8; i++

)return cnt;

}

int neighbors[3]

=;for(

int i =

0; i <

3; 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 即為死細胞。每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 根據當前狀態,寫乙個函式來計算面板上細胞的下乙個 一次更新後的 狀態。下乙...