(2) Bit operation - in place
public class Solution {
public void gameOfLife(int[][] board) {
if (board == null || board.length == 0 || board[0].length == 0) {
return;
}
int[][] newState = new int[board.length][board[0].length];
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
board[i][j] = isLive(i, j, board);
}
}
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
board[i][j] = board[i][j] >> 1;
}
}
}
private int isLive(int i, int j, int[][] board) {
int liveNeighbor = 0;
for (int m = i - 1; m < board.length && m <= i + 1; m++) {
for (int n = j - 1; n < board[0].length && n <= j + 1; n++) {
if (m < 0 || n < 0 || (m == i && n == j)) {
continue;
}
if ((board[m][n] & 0x0001) == 1) {
liveNeighbor++;
}
}
}
if (liveNeighbor <= 1 || liveNeighbor >= 4) {
return board[i][j];
}
if (liveNeighbor == 3) {
return (board[i][j] | 2);
}
return (board[i][j] | (board[i][j] << 1));
}
}
没有评论:
发表评论