LeetCode 289. Game of Life

public class Solution {
    public void gameOfLife(int[][] board) {
    	if (board == null || board.length == 0 || board[0].length == 0) return;
    	int m = board.length;
    	int n = board[0].length;
    	int level = 0;
    	while (level < m + 1 || level < n + 1) {
	    	if (level < n) {
	    		for (int i = 0; i <= (level < m ? level : m - 1); i++) board[i][level] = getState(board, i, level);
    		}
	    	if (level < m) {
	    		for (int j = (level - 1 < n ? level - 1 : n - 1); j >= 0 ; j--) board[level][j] = getState(board, level, j);
	    	}
	    	if (level <= n) {
	    		for (int i = 0; i <= (level - 1 < m ? level - 1 : m - 1); i++) {
	    			if (board[i][level - 1] == -1) board[i][level - 1] = 0;
	    			else if (board[i][level - 1] == 2) board[i][level - 1] = 1;
	    		}
	    	}
	    	if (level <= m) {
	    		for (int j = (level - 2 >= n - 1 ? n - 1 : level - 2); j >= 0; j--) {
	    			if (board[level - 1][j] == -1) board[level - 1][j] = 0;
	    			else if (board[level - 1][j] == 2) board[level - 1][j] = 1;
	    		}
	    	}
    		level++;
    	}
    }
    
    private int getState(int[][]board, int x, int y) {
    	int m = board.length;
    	int n = board[0].length;
    	int state = board[x][y];
    	int live = 0;
    	for (int i = (x - 1 >= 0 ? x - 1 : 0); i <= (x + 1 < m ? x + 1 : m - 1); i++) {
    		for (int j = (y - 1 >= 0 ? y - 1 : 0); j <= (y + 1 < n ? y + 1 : n - 1); j++) {
    			if ((i != x || j != y) && (board[i][j] == -1 || board[i][j] == 1)) live++;
    		}
    	}
    	if (state == 1) {
    		if (live < 2) state = -1;
    		else if (live > 3) state = -1;
    	} else if (live == 3) state = 2;
    	else state = 0;
    	return state;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章