289. Game of Life

由于状态用一位表示即可,因此利用两位(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;   
            }
        }
    }
};

猜你喜欢

转载自www.cnblogs.com/hankunyan/p/9050711.html