0和1只需要int中的最低位就可以保存了,所以我们用int中的第二位来存储下一个状态的结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| class Solution { public: void gameOfLife(vector<vector<int>>& board) { int m = board.size(), n = board[0].size(); for(int i = 0; i < m; ++i) { for(int j = 0; j < n; ++j) { int aliveCell = 0; int cur = board[i][j]; if(i > 0 && board[i - 1][j] & 1) ++aliveCell; if(j > 0 && board[i][j - 1] & 1) ++aliveCell; if(i < m - 1 && board[i + 1][j] & 1) ++aliveCell; if(j < n - 1 && board[i][j + 1] & 1) ++aliveCell; if(i > 0 && j > 0 && board[i - 1][j - 1] & 1) ++aliveCell; if(i < m - 1 && j > 0 && board[i + 1][j - 1] & 1) ++aliveCell; if(i < m - 1 && j < n - 1 && board[i + 1][j + 1] & 1) ++aliveCell; if(i > 0 && j < n - 1 && board[i - 1][j + 1] & 1) ++aliveCell; if(cur == 1 && (aliveCell < 2 || aliveCell > 3)) board[i][j] = 1; else if(cur == 0 && aliveCell == 3) board[i][j] = 2; else board[i][j] = board[i][j] ? 3 : 0; } } for(auto& line : board) for(auto& num : line) num >>= 1;
} };
|