Game of Life
class Solution {
//用两位表示,所以初始高位总是0,相加时候不改变低位。
public void gameOfLife(int[][] board) {
int n = board.length, m = board[0].length;
for(int i = 0; i < n; i ++){
for(int j = 0; j < m; j ++){
int cnt = getLiveNeighbors(board, i, j);
if(board[i][j] == 1 && cnt <= 3 && cnt >= 2){
board[i][j] = 3;
}
if(board[i][j] == 0 && cnt == 3){
board[i][j] = 2;
}
}
}
for(int i = 0; i < n; i ++){
for(int j = 0; j < m; j ++){
board[i][j] >>= 1;
}
}
}
int getLiveNeighbors(int[][] board, int x, int y){
int n = board.length, m = board[0].length, sum = 0;
//右边界要=
for(int i = Math.max(0, x - 1); i <= Math.min(x + 1, n - 1); i ++){
for(int j = Math.max(0, y - 1); j <= Math.min(y + 1, m - 1); j ++){
sum += board[i][j] & 1;
}
}
sum -= board[x][y] & 1;
return sum;
}
}Last updated