leetcode_game_of_life

难度:Medium

这里

状态机转换:

0:死为死
1:活为活
2:活变死
3:死变活

然后遍历每个点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution {
public:
void gameOfLife(vector<vector<int>>& board) {
int m = board.size(), n = board[0].size();
int dx[] = {-1,-1,-1,0,0,1,1,1};
int dy[] = {-1,0,1,-1,1,-1,0,1};
for(int i = 0; i < board.size(); i++)
{
for(int j = 0; j < board[0].size(); j++)
{
int cnt = 0;
for(int k = 0; k < 8; k++)
{
if(i+dx[k] >= 0 && i+dx[k] < m && j + dy[k] >= 0 && j+dy[k] < n && (board[i+dx[k]][j+dy[k]] == 1 ||board[i+dx[k]][j+dy[k]] == 2))
cnt++;
}
if(board[i][j] && (cnt < 2 || cnt >3))
board[i][j] = 2;
else if(!board[i][j] && cnt == 3)
board[i][j] = 3;
}
}

for(int i = 0; i < board.size(); i++)
{
for(int j = 0; j < board[0].size(); j++)
{
board[i][j] = board[i][j] % 2;
}
}

}
};