//因为要in-place 置换,而每一个cell 的改变会引起其他改变,所以我们用中间态来表示原态
//中间态不仅要能转化为原态还能转化为变化后的态
//有四种状态
//live-live(==2/==3)
//die-live(==3)
//live-die(<2)
//live-die(>3)
// 因为0,1加上10,再mod 10 不变,而除以10则有区别,比如由die->live 0+10=10 10%10=0;而10/10=1;
//live->live 1+10=11 11%10=1;而11/10=1; live->die; 不加1%10=1;1/10=0;由livetodie
class Solution {
public:
void gameOfLife(vector<vector<int>>& board)
{
int m=board.size();
int n=board[0].size();
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if( board[i][j]%10==0 && gamesum(board,i,j)==3 )//dietolive
board[i][j]+=10;
if( board[i][j]%10==1 && ( gamesum(board,i,j)==2||gamesum(board,i,j)==3 ) )//livetolive
board[i][j]+=10;
}
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
board[i][j]/=10;
}
}
int gamesum(vector<vector<int>>& board, int i, int j)
{
int m = board.size();
int n = board[0].size();
int count = 0;
for (int p = i - 1; p <= i + 1; p++)
for (int q = j - 1; q <= j + 1; q++)
{
if (p < 0 || q < 0 || p >= m || q >= n || (p == i&&q == j))continue;
if (board[p][q] % 10 == 1)
count++;
}
return count;
}
};
[leetcode]289. Game of Life
最新推荐文章于 2023-12-05 10:50:48 发布