According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970."
Given a board with m by n cells, each cell has an initial state live (1) or dead (0). Each cell interacts with its eight neighbors (horizontal, vertical, diagonal) using the following four rules (taken from the above Wikipedia article):
Write a function to compute the next state (after one update) of the board given its current state.
Follow up:
solution:
1. Dead -> Dead 0, Dead -> Live 10, Live -> Live 11, Live ->Dead 1, only information we need to change cell state is the neighbors live number.
then store the state transition info in the value, and update the final value.
public void gameOfLife(int[][] board) { if(board.length<=0) return; int row = board.length; int col = board[0].length; for(int i=0;i<row;i++) { for(int j = 0; j<col; j++) { int x = getLiveNum(board, i, j); if(board[i][j] == 0) {//died cell if(x == 3) board[i][j]+=10; }else {//live cell if(x == 2 || x == 3) board[i][j]+=10; } } } for(int i=0;i<row;i++) { for(int j=0;j<col;j++) { if(board[i][j] /10 ==1) board[i][j] = 1; else board[i][j] = 0; } } } public int getLiveNum(int[][] board, int x, int y) { int count = 0; for(int i= x-1; i<=x+1;i++) { for(int j= y-1;j<=y+1;j++) { if(i<0 || j<0 || i>=board.length || j>=board[0].length || (i==x && j==y)) continue; if(board[i][j] %10 == 1) count++; } } return count; }