先复制一份题目所给的二维数组,然后遍历复制的这份数组根据每一个细胞四周的活细胞数对原数组中对应位置的细胞进行更新即可。
设一个细胞四周活细胞数为sum,题目所给的四个条件实际上相当:
class Solution {
public:
void gameOfLife(vector<vector<int>>& board) {
vector<vector<int>> copy(board);//将给的二维表复制一份到copy中
int sum;
for(int i = 0; i < copy.size(); i++){
for(int j = 0; j < copy[0].size(); j++){//遍历copy
int id, jd;
sum = -copy[i][j];//省去循环中判断遍历到的是周围的细胞还是这个细胞自身
for(id = -1; id <= 1; id++){
for(jd = -1; jd <= 1; jd++){//遍历一个细胞周围的8个细胞,计算sum
int ix = i + id, jx = j + jd;
if(ix < 0 || ix >= copy.size() || jx < 0 || jx >= copy[i].size()){
sum += 0;
}else{
sum += copy[ix][jx];
}
}
}
if(sum == 2){//周围有两个活细胞,细胞保持原有状态
board[i][j] = board[i][j]&&1;
}else if(sum < 2 || sum >3){//周围活细胞数小于2或大于3,细胞必死
board[i][j] = 0;
}else{//周围有3个活细胞,细胞必活
board[i][j] = 1;
}
}
}
}
};
原文:https://www.cnblogs.com/Nreyab/p/12618807.html