LeetCode
class Solution {
public :
void gameOfLife(vector <vector <int > > & board) {
if (board.size() == 0 ) return ;
int rowLen = board.size();
int colLen = board[0 ].size();
for (int i = 0 ; i < rowLen; i++) {
for (int j = 0 ; j < colLen; j++) {
int lives = livesNeighbour(board,i,j,rowLen,colLen);
if (board[i][j] & 1 == 1 ) {
if (lives == 2 || lives == 3 )
board[i][j] = 3 ;
} else {
if (lives == 3 )
board[i][j] = 2 ;
}
}
}
for (int i = 0 ; i < rowLen; i++) {
for (int j = 0 ; j < colLen; j++) {
board[i][j] >>= 1 ;
}
}
return ;
}
int max(int a, int b) {
return a > b ? a : b;
}
int min(int a, int b) {
return a < b ? a : b;
}
int livesNeighbour(vector <vector <int > > & board, int row, int col, int rowLen, int colLen) {
int lives = 0 ;
for (int i = max(row-1 , 0 ); i <= min(row+1 ,rowLen-1 ); i++) {
for (int j = max(col-1 ,0 ); j <= min(col+1 ,colLen-1 ); j++) {
lives += board[i][j] & 1 ;
}
}
lives -= board[row][col] & 1 ;
return lives;
}
};