【Java】力扣_每日一題_289.生命遊戲_中等

題目鏈接:https://leetcode-cn.com/problems/game-of-life/

題目描述
根據 百度百科 ,生命遊戲,簡稱爲生命,是英國數學家約翰·何頓·康威在 1970 年發明的細胞自動機。

給定一個包含 m × n 個格子的面板,每一個格子都可以看成是一個細胞。每個細胞都具有一個初始狀態:1 即爲活細胞(live),或 0 即爲死細胞(dead)。每個細胞與其八個相鄰位置(水平,垂直,對角線)的細胞都遵循以下四條生存定律:

1.如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡;
2.如果活細胞周圍八個位置有兩個或三個活細胞,則該位置活細胞仍然存活;
3.如果活細胞周圍八個位置有超過三個活細胞,則該位置活細胞死亡;
4.如果死細胞周圍正好有三個活細胞,則該位置死細胞復活;

根據當前狀態,寫一個函數來計算面板上所有細胞的下一個(一次更新後的)狀態。下一個狀態是通過將上述規則同時應用於當前狀態下的每個細胞所形成的,其中細胞的出生和死亡是同時發生的。

第一次編輯代碼:

class Solution {
    public void gameOfLife(int[][] board) {
        int row = board.length;
        int col = board[0].length;
        int[][] rt = new int[row][col];
        for(int i = 0;i < row;i++)
            for(int j = 0;j < col;j++){
                setlife(board,rt,i,j,row,col);
            }
        for(int i = 0;i < row;i++)
            for(int j = 0;j < col;j++){
                board[i][j] = rt[i][j];
            }
    }
    public void setlife(int[][] b,int[][] r,int i,int j,int row,int col){
        int alive = 0;
        if(i - 1 >= 0 && j - 1 >= 0 && b[i-1][j-1] == 1)
            alive++;
        if(i - 1 >= 0 && b[i-1][j] == 1)
            alive++;
        if(i - 1 >= 0 && j + 1 < col && b[i-1][j+1] == 1)
            alive++;
        if(j - 1 >= 0 && b[i][j-1] == 1)
            alive++;
        if(j + 1 < col && b[i][j+1] == 1)
            alive++;
        if(i + 1 < row && j - 1 >= 0 && b[i+1][j-1] == 1)
            alive++;
        if(i + 1 < row && b[i+1][j] == 1)
            alive++;
        if(i + 1 < row && j + 1 < col && b[i+1][j+1] == 1)
            alive++;
        
        if(alive < 2 && b[i][j] == 1)
            r[i][j] = 0;
        else if(alive >= 2 && alive <= 3 && b[i][j] == 1)
            r[i][j] = 1;
        else if(alive > 3 && b[i][j] == 1)
            r[i][j] = 0;
        else if(alive == 3 && b[i][j] == 0)
            r[i][j] = 1;
    }
}

提交結果
運行結果
ohhhhhhhhhhh
原來大家都是0ms,那沒事了

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