Game of Life LeetCode solution in C++

1
// Idea: Encode the value into 2-bit value, the first bit is the value of next
2
// state, and the second bit is the value of current state
3
class Solution {
4
public:
5
void gameOfLife(vector<vector<int>> &board) {
6
int m = board.size();
7
int n = board[0].size();
8
for (int i = 0; i < m; ++i) {
9
for (int j = 0; j < n; ++j) {
10
encode(board, i, j);
11
}
12
}
13
for (int i = 0; i < m; ++i) {
14
for (int j = 0; j < n; ++j) {
15
board[i][j] >>= 1;
16
}
17
}
18
}
19
void encode(vector<vector<int>> &board, int row, int col) {
20
int ones = 0;
21
int zeros = 0;
22
int m = board.size();
23
int n = board[0].size();
24
int cur = board[row][col];
25
if (row >= 1 && col >= 1) {
26
ones += (board[row - 1][col - 1] & 1);
27
zeros += !(board[row - 1][col - 1] & 1);
28
}
29
if (row >= 1) {
30
ones += (board[row - 1][col] & 1);
31
zeros += !(board[row - 1][col] & 1);
32
}
33
if (row >= 1 && col < n - 1) {
34
ones += (board[row - 1][col + 1] & 1);
35
zeros += !(board[row - 1][col + 1] & 1);
36
}
37
if (col < n - 1) {
38
ones += (board[row][col + 1] & 1);
39
zeros += !(board[row][col + 1] & 1);
40
}
41
if (row < m - 1 && col < n - 1) {
42
ones += (board[row + 1][col + 1] & 1);
43
zeros += !(board[row + 1][col + 1] & 1);
44
}
45
if (row < m - 1) {
46
ones += (board[row + 1][col] & 1);
47
zeros += !(board[row + 1][col] & 1);
48
}
49
if (row < m - 1 && col >= 1) {
50
ones += (board[row + 1][col - 1] & 1);
51
zeros += !(board[row + 1][col - 1] & 1);
52
}
53
if (col >= 1) {
54
ones += (board[row][col - 1] & 1);
55
zeros += !(board[row][col - 1] & 1);
56
}
57
if (ones < 2 && cur == 1) {
58
cur += 0 << 1;
59
} else if (ones >= 2 && ones <= 3 && cur == 1) {
60
cur += 1 << 1;
61
} else if (ones > 3 && cur == 1) {
62
cur += 0 << 1;
63
} else if (ones == 3 && cur == 0) {
64
cur += 1 << 1;
65
} else {
66
cur += cur << 1;
67
}
68
board[row][col] = cur;
69
}
70
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0