由于状态用一位表示即可,因此利用两位(two bits)就可以同时记录之前的状态和新状态,进而不用新建一个board。
低位是原来的状态,高位是新状态。
class Solution { public: int di[8]={-1,0,1,1,-1,-1,0,1}; int dj[8]={-1,-1,-1,0,0,1,1,1}; void gameOfLife(vector<vector<int>>& board) { for (int i=0;i<board.size();++i){ for (int j=0;j<board[0].size();++j){ int live=0; for (int k=0;k<8;++k){ int ii=i+di[k], jj=j+dj[k]; if (ii<0 || ii>=board.size() || jj<0 || jj>=board[0].size()) continue; if (board[ii][jj] & 1) ++live; } if (board[i][j]){ //live if (live<2 || live>3) board[i][j]=1; //01 else board[i][j]=3; //11 }else{ //dead if (live==3) board[i][j]=2; //10 } } } for (int i=0;i<board.size();++i){ for (int j=0;j<board[0].size();++j){ board[i][j] >>=1; } } } };