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:
[思路]
inplace的话, 只要有办法区分 4种状态, DEAD->LIVE, DEAD->DEAD, LIVE->LIVE, LIVE->DEAD 即可. int 完全可以找4个数来表示这4种状态.
这里我用了 0,1, 10, 11 表示.
[CODE]
public class Solution { public void gameOfLife(int[][] board) { //check input if(board==null || board.length==0 || board[0]==null || board[0].length==0) return; int m = board.length; int n = board[0].length; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { int x = getLiveNum(board, i, j); if(board[i][j] == 0) { if(x==3) board[i][j]+=10; } else { if(x==2 || x==3) board[i][j]+=10; } } } for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { board[i][j] /= 10; } } } private int getLiveNum(int[][] board, int x, int y) { int c=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-1 || j>board[0].length-1 || (i==x && j==y)) continue; if(board[i][j]%10==1) c++; } } return c; } }