1
+ package medium ;
2
+
3
+ class lc289 {
4
+ // (0 -> 1) -> 2
5
+ // (1 -> 0) -> -1
6
+ public void gameOfLife (int [][] board ) {
7
+
8
+ for (int i = 0 ; i < board .length ; i ++) {
9
+ for (int j = 0 ; j < board [i ].length ; j ++) {
10
+ int aliveCount = getAliveCount (board , i , j );
11
+ if (board [i ][j ] == 0 ) {
12
+ if (aliveCount == 3 ) {
13
+ board [i ][j ] = 2 ;
14
+ }
15
+ } else if (board [i ][j ] == 1 ) {
16
+ if (aliveCount < 2 || aliveCount > 3 ) {
17
+ board [i ][j ] = -1 ;
18
+ }
19
+ }
20
+ }
21
+ }
22
+
23
+ for (int i = 0 ; i < board .length ; i ++) {
24
+ for (int j = 0 ; j < board [i ].length ; j ++) {
25
+ if (board [i ][j ] == -1 ) {
26
+ board [i ][j ] = 0 ;
27
+ } else if (board [i ][j ] == 2 ) {
28
+ board [i ][j ] = 1 ;
29
+ }
30
+ }
31
+ }
32
+ }
33
+
34
+ private boolean isAlive (int [][] board , int i , int j ) {
35
+ return board [i ][j ] == 1 || board [i ][j ] == -1 ;
36
+ }
37
+
38
+ private int getAliveCount (int [][] board , int i , int j ) {
39
+ int result = 0 ;
40
+ if (i - 1 >= 0 && j - 1 >= 0 && isAlive (board , i - 1 , j - 1 )) {
41
+ result += 1 ;
42
+ }
43
+ if (i - 1 >= 0 && isAlive (board , i - 1 , j )) {
44
+ result += 1 ;
45
+ }
46
+ if (i - 1 >= 0 && j + 1 < board [i ].length && isAlive (board , i - 1 , j + 1 )) {
47
+ result += 1 ;
48
+ }
49
+ if (j - 1 >= 0 && isAlive (board , i , j - 1 )) {
50
+ result += 1 ;
51
+ }
52
+
53
+ if (j + 1 < board [i ].length && isAlive (board , i , j + 1 )) {
54
+ result += 1 ;
55
+ }
56
+ if (i + 1 < board .length && j - 1 >= 0 && isAlive (board , i + 1 , j - 1 )) {
57
+ result += 1 ;
58
+ }
59
+ if (i + 1 < board .length && isAlive (board , i + 1 , j )) {
60
+ result += 1 ;
61
+ }
62
+ if (i + 1 < board .length && j + 1 < board [i ].length && isAlive (board , i + 1 , j + 1 )) {
63
+ result += 1 ;
64
+ }
65
+ return result ;
66
+ }
67
+ }
0 commit comments