题解
本题的关键是
- 遍历与某个格子相邻的8个格子的方法
- 更新的状态并不会发挥作用,影响其周围的方格,所以需要将当前状态复制一份
// 285 t289 生命游戏
public void gameOfLife(int[][] board) {
int neborhood[]=new int[]{0,1,-1 };
int[][] temp = new int[board.length][board[0].length];
for (int i = 0; i <board.length; i++) {
for (int j = 0; j <board[0].length; j++) {
temp[i][j]= board[i][j];
}
}
int rows=board.length;
int cols=board[0].length;
//统计
for (int row = 0; row <board.length; row++) {
for (int col = 0; col <board[0].length; col++) {
int liveNeb=0;
// 遍历八荒
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (!(neborhood[i]==0&&neborhood[j]==0)){
int r=row+neborhood[i]; // 行
int c=col+neborhood[j]; // 列
// 符合条件
if (r<rows&&r>=0&&c<cols&&c>=0&&(temp[r][c]==1)){
liveNeb++;
}
}
}
}
// 更新
if (temp[row][col]==1&&(liveNeb<2||liveNeb>3)){
board[row][col]=0;
}
if (temp[row][col]==0&&liveNeb==3){
board[row][col]=1;
}
}
}
}