日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode--289. 生命游戏

發布時間:2024/7/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--289. 生命游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

如果活細胞周圍八個位置的活細胞數少于兩個,則該位置活細胞死亡;
如果活細胞周圍八個位置有兩個或三個活細胞,則該位置活細胞仍然存活;
如果活細胞周圍八個位置有超過三個活細胞,則該位置活細胞死亡;
如果死細胞周圍正好有三個活細胞,則該位置死細胞復活;
根據當前狀態,寫一個函數來計算面板上細胞的下一個(一次更新后的)狀態。下一個狀態是通過將上述規則同時應用于當前狀態下的每個細胞所形成的,其中細胞的出生和死亡是同時發生的。

示例:

輸入:?
[
??[0,1,0],
??[0,0,1],
??[1,1,1],
??[0,0,0]
]
輸出:?
[
??[0,0,0],
??[1,0,1],
??[0,1,1],
??[0,1,0]
]
進階:

你可以使用原地算法解決本題嗎?請注意,面板上所有格子需要同時被更新:你不能先更新某些格子,然后使用它們的更新后的值再更新其他格子。
本題中,我們使用二維數組來表示面板。原則上,面板是無限的,但當活細胞侵占了面板邊界時會造成問題。你將如何解決這些問題?

思路:因為不能立即更新數據,因為當前更新的數據會影響后面值的判斷

因此采用標記法

如果該位置值不發生改變,那么不動它

改變的話,-1表示0轉1,-2表示1轉0

提交的代碼:

class?Solution?{

????public?void?gameOfLife(int[][]?board)?{

????????//-1表示0轉1,-2表示1轉0

?????????int?sum,i,j;

????????????for(i=0;i<board.length;i++)

????????????{

????????????????

????????????????for(j=0;j<board[0].length;j++)

????????????????{

????????????????????sum=0;

????????????????????if(i-1>=0)

????????????????????{

????????????????????????if(board[i-1][j]==-1||board[i-1][j]==0)

????????????????????????{

????????????????????????????sum+=0;

????????????????????????}

????????????????????????else

????????????????????????{

????????????????????????????sum+=1;

????????????????????????}

????????????????????????if(j-1>=0)

????????????????????????{

????????????????????????????

????????????????????????????if(board[i-1][j-1]==-1||board[i-1][j-1]==0)

????????????????????????????{

????????????????????????????????sum+=0;

????????????????????????????}

????????????????????????????else

????????????????????????????{

????????????????????????????????sum+=1;

????????????????????????????}

????????????????????????}

????????????????????????if(j+1<board[0].length)

????????????????????????{

????????????????????????????if(board[i-1][j+1]==-1||board[i-1][j+1]==0)

????????????????????????????{

????????????????????????????????sum+=0;

????????????????????????????}

????????????????????????????else

????????????????????????????{

????????????????????????????????sum+=1;

????????????????????????????}

????????????????????????}

????????????????????}

????????????????????if(j-1>=0)

????????????????????{

????????????????????????if(board[i][j-1]==-1||board[i][j-1]==0)

????????????????????????{

????????????????????????????sum+=0;

????????????????????????}

????????????????????????else

????????????????????????{

????????????????????????????sum+=1;

????????????????????????}

????????????????????}

????????????????????if(j+1<board[0].length)

????????????????????{

????????????????????????if(board[i][j+1]==-1||board[i][j+1]==0)

????????????????????????{

????????????????????????????sum+=0;

????????????????????????}

????????????????????????else

????????????????????????{

????????????????????????????sum+=1;

????????????????????????}

????????????????????}

????????????????????if(i+1<board.length)

????????????????????{

????????????????????????if(j-1>=0)

????????????????????????{

????????????????????????????if(board[i+1][j-1]==-1||board[i+1][j-1]==0)

????????????????????????????{

????????????????????????????????sum+=0;

????????????????????????????}

????????????????????????????else

????????????????????????????{

????????????????????????????????sum+=1;

????????????????????????????}

????????????????????????}

????????????????????????if(j+1<board[0].length)

????????????????????????{

????????????????????????????if(board[i+1][j+1]==-1||board[i+1][j+1]==0)

????????????????????????????{

????????????????????????????????sum+=0;

????????????????????????????}

????????????????????????????else

????????????????????????????{

????????????????????????????????sum+=1;

????????????????????????????}

????????????????????????}

????????????????????????if(board[i+1][j]==-1||board[i+1][j]==0)

????????????????????????{

????????????????????????????sum+=0;

????????????????????????}

????????????????????????else

????????????????????????{

????????????????????????????sum+=1;

????????????????????????}

????????????????????}

????????????????if(board[i][j]==0)

????????????????{

????????????????????if(sum==3)

????????????????????{

????????????????????????board[i][j]?=?-1;

????????????????????}

????????????????}

????????????????else

????????????????{

????????????????????if(sum==2||sum==3)

????????????????????{

????????????????????????

????????????????????}

????????????????????else

????????????????????{

????????????????????????board[i][j]?=?-2;

????????????????????}

????????????????}

????????????????????

????????????????}

????????????????

????????????}

????????????for(i=0;i<board.length;i++)

????????????{

????????????????for(j=0;j<board[0].length;j++)

????????????????{

????????????????????if(board[i][j]==-1)

????????????????????{

????????????????????????board[i][j]?=?1;

????????????????????}

????????????????????else?if(board[i][j]==-2)

????????????????????{

????????????????????????board[i][j]?=?0;

????????????????????}

????????????????}

????????????}

????}

}

總結

以上是生活随笔為你收集整理的Leetcode--289. 生命游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。