leetcode-289- Game of Life

 

 Solution a: O (MN) O (MN)) Java version

class Solution {
    public void gameOfLife(int[][] board) {
        int [] neighbors = {0,1,-1};
        int rows = board.length;
        int cols = board[0].length;
        int [][] copyBoard = new int [rows][cols];
        for(int row = 0;row<rows;row++){
            for(int col = 0;col< cols; col++){
                copyBoard[row][col] = board[row][col];
            }
        }
        for(int row = 0; row <rows;row++){
            for(int col = 0; col < cols;col++){
                int liveNeighbors = 0;
                for(int i =0; i <3;i++){
                    for(int j = 0; j < 3;j++){
                        if(!(neighbors[i] == 0 && neighbors[j] == 0)){
                            int r = (row +neighbors[i]);
                            int c = (col + neighbors[j]);
                            if ((r <rows && r>=0)&&(c < cols && c>= 0)&&(copyBoard[r][c] == 1)){
                                liveNeighbors += 1;
                            }
                        }
                    }
                }
                if((copyBoard[row][col] == 1)&&(liveNeighbors <2 || liveNeighbors >3)){
                    board[row][col] = 0;
                }
                if (copyBoard[row][col] == 0&& liveNeighbors == 3){
                    board[row][col] = 1;
                }
            }
        }
    }
}

Method two: O (mn) O (1)

class Solution {
    public void gameOfLife(int[][] board) {
        int [] neighbors = {0,1,-1};
        int rows = board.length;
        int cols = board[0].length;
        
        for(int row = 0; row <rows;row++){
            for(int col = 0; col < cols;col++){
                int liveNeighbors = 0;
                for(int i =0; i <3;i++){
                    for(int j = 0; j < 3;j++){
                        if(!(neighbors[i] == 0 && neighbors[j] == 0)){
                            int r = (row +neighbors[i]);
                            int c = (col + neighbors[j]);
                            if ((r <rows && r>=0)&&(c < cols && c>= 0)&&(Math.abs(board[r][c]) == 1)){
                                liveNeighbors += 1;
                            }
                        }
                    }
                }
                if((board[row][col] == 1)&&(liveNeighbors <2 || liveNeighbors >3)){
                    board[row][col] = -1;
                }
                if (board[row][col] == 0&& liveNeighbors == 3){
                    board[row][col] = 2;
                }
            }
        }
        
        for(int row = 0;row<rows;row++){
            for(int col = 0;col< cols; col++){
                if (board[row][col] > 0){
                    board[row][col] = 1;
                }else{
                    board[row][col] = 0;
                }

            }
        }
    }
}

 

Guess you like

Origin www.cnblogs.com/oldby/p/12620843.html