Leetcode 289 生命遊戲

2021-09-24 14:50:05 字數 1061 閱讀 2020

,生命遊戲,簡稱為生命,是英國數學家約翰·何頓·康威在2023年發明的細胞自動機。

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

] 高階:

於題目中要求所有點的狀態需要一次性發生改變,而且不用額外的空間,這是本題的最大難點。

既然需要"就地解決",我們不妨分析一下borad的特性:board上的元素有兩種狀態,生(1)和死(0)。這兩種狀態存在了乙個int型裡面。所以我們可以有效利用除最低位的其它位,去儲存更新後的狀態,這樣就不需要有額外的空間了。

具體而言,我們可以用最低位表示當前狀態,次低位表示更新後狀態:

1

class

solution ,,,,,,,};

8for(int i=0;i)

17if((board[i][j]&1)==1)else23}

24}25for(int i=0;i)29}

30}31 }

leetcode 289 生命遊戲

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

Leetcode 289 生命遊戲

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

LeetCode 289 生命遊戲

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