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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode--289. 生命游戏

發(fā)布時(shí)間:2024/7/19 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--289. 生命游戏 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

根據(jù)百度百科,生命游戲,簡(jiǎn)稱為生命,是英國(guó)數(shù)學(xué)家約翰·何頓·康威在1970年發(fā)明的細(xì)胞自動(dòng)機(jī)。

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

如果活細(xì)胞周圍八個(gè)位置的活細(xì)胞數(shù)少于兩個(gè),則該位置活細(xì)胞死亡;
如果活細(xì)胞周圍八個(gè)位置有兩個(gè)或三個(gè)活細(xì)胞,則該位置活細(xì)胞仍然存活;
如果活細(xì)胞周圍八個(gè)位置有超過(guò)三個(gè)活細(xì)胞,則該位置活細(xì)胞死亡;
如果死細(xì)胞周圍正好有三個(gè)活細(xì)胞,則該位置死細(xì)胞復(fù)活;
根據(jù)當(dāng)前狀態(tài),寫(xiě)一個(gè)函數(shù)來(lái)計(jì)算面板上細(xì)胞的下一個(gè)(一次更新后的)狀態(tài)。下一個(gè)狀態(tài)是通過(guò)將上述規(guī)則同時(shí)應(yīng)用于當(dāng)前狀態(tài)下的每個(gè)細(xì)胞所形成的,其中細(xì)胞的出生和死亡是同時(shí)發(fā)生的。

示例:

輸入:?
[
??[0,1,0],
??[0,0,1],
??[1,1,1],
??[0,0,0]
]
輸出:?
[
??[0,0,0],
??[1,0,1],
??[0,1,1],
??[0,1,0]
]
進(jìn)階:

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

思路:因?yàn)椴荒芰⒓锤聰?shù)據(jù),因?yàn)楫?dāng)前更新的數(shù)據(jù)會(huì)影響后面值的判斷

因此采用標(biāo)記法

如果該位置值不發(fā)生改變,那么不動(dòng)它

改變的話,-1表示0轉(zhuǎn)1,-2表示1轉(zhuǎn)0

提交的代碼:

class?Solution?{

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

????????//-1表示0轉(zhuǎn)1,-2表示1轉(zhuǎn)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;

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

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

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

????}

}

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。