ソリューション:O(MN)O(MN))Javaのバージョン
クラスソリューション{ 公共 ボイド gameOfLife(INT [] []基板){ INT []隣人= {0,1、-1 }。 int型の列= board.length。 INT COLS =ボード[0 ] .LENGTH。 INT [] []コピーボード= 新しい int型[行] [colsの]。 用(INTの列= 0、行<行、行++ ){ ための(int型 COL = 0、COL <COLS; COL ++ ){ 原稿台[行] [COL] = ボード[行] [COL]。 } } 用(INTの列= 0、行<行、行++ ){ ため(INT COL = 0、COL <COLS; COL ++ ){ int型 liveNeighbors = 0 。 以下のために(INT I = 0; I <3; I ++ ){ ため(INT J = 0; J <3; J ++ ){ もし、((隣人[I] == 0 &&ネイバー[j] == 0] )){ INT R =(行+ 隣人[I])。 INT C =(COL + 隣人[J])。 もし((R <行&& R> = 0)&&(C <COLS && C> = 0)&&(原稿台[R] [C] == 1 )){ liveNeighbors + = 1 ; } } } } もし、((原稿台[行] [COL] == 1)&&(liveNeighbors <2 || liveNeighbors> 3 )){ ボード[行] [COL] = 0 ; } であれば(原稿台[行] [COL] == 0 && liveNeighbors == 3 ){ ボード[行] [COL] = 1 。
方法2:O(MN)O(1)
クラスソリューション{ 公共 ボイド gameOfLife(INT [] []基板){ INT []隣人= {0,1、-1 }。 int型の列= board.length。 INT COLS =ボード[0 ] .LENGTH。 用(INTの列= 0、行<行、行++ ){ ため(INT COL = 0、COL <COLS; COL ++ ){ int型 liveNeighbors = 0 。 用(intは I ++; I <3 I = 0 {) のための(INTJ = 0; J <3; J ++ ){ もし、((隣人[I] == 0 &&ネイバー[j] == 0] )){ int型、R =(行+ 隣人[I])。 INT C =(COL + 隣人[J])。 もし((R <行&& R> = 0)&&(C <COLS && C> = 0)&&(Math.abs(ボード[R] [C])== 1 )){ liveNeighbors + = 1 ; } } } } もし、((ボード[行] [COL] == 1)&&(liveNeighbors <2 || liveNeighbors> 基板[行] [COL] = -1 。 } もし(ボード[行] [COL] == 0 && liveNeighbors == 3 ){ ボード[行] [COL] = 2 ; } } } のための(int型の列= 0、行<行、行++ ){ ための(int型 COL = 0、COL <COLS; COL ++ ){ 場合(ボード[行] [COL]> 0 ){ ボード[行] [COL ] = 1 。 } 他{ ボード[行] [COL] = 0; } } } } }