LeetCode 陣列 生命遊戲

2022-08-20 08:57:08 字數 1286 閱讀 8300

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

]

題目連線:

通過當前細胞 board[i][j] 周圍 8 個位置的細胞狀態:

class solution ,,,,,,,};

int rows = board.size();

int cols = board[0].size();

vector> copy = board;

for(int i=0; i=0 && nr=0 && nc3) copy[i][j] = 0;}}

} board = copy;

}};

思路一需要儲存輸入狀態的乙個副本,空間複雜度為 o(m x n),我們可以通過新增額外的狀態來將空間複雜度降到 o(1)。

狀態的變化有 3 種:0->1、1->0,不變。我們使用 3 表示 0 轉為 1,例如,board[i][j]=3 說明 board[i][j] 之前的狀態是 0,下一時刻的狀態是 1,設為 3 是為了不影響其他細胞的狀態。同理,board[i][j]=-1 說明 board[i][j] 之前的狀態是 1,下一時刻的狀態是 0. 當處理完成後,我們將陣列中大於 0 的數都置為 1,其餘的都置為 0. **如下:

class solution ,,,,,,,};

int rows = board.size();

int cols = board[0].size();

for(int i=0; i=0 && nr=0 && nc3) board[i][j] = -1;}}

} for(int i=0; i0) board[i][j]=1;

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

}};

leetcode 289 生命遊戲

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

Leetcode 289 生命遊戲

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

LeetCode 289 生命遊戲

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