类别:数组 二维数组变换
题目:
想法:
一个活细胞影响周围8个细胞,遍历矩阵,遇到活细胞则给周围8个细胞都+10。
再次遍历矩阵,更新所有细胞状态。十位数是周围活细胞数目,个位数是细胞的原始状态。
代码:
class Solution {
public void gameOfLife(int[][] board) {
int m=board.length;
int n=board[0].length;
int i,j,a,b;
//遍历一次矩阵,记录活细胞对周围的影响
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(board[i][j]%10==1){
//活细胞影响周围八个->都加10
for(a=i-1;a<=i+1;a++){
for(b=j-1;b<=j+1;b++){
if(a==i && b==j){
continue;
}else if(a>=0 && a<m && b>=0 && b<n){
board[a][b]+=10;
}
}
}
}
}
}
//再次遍历矩阵,更新所有值
for(i=0;i<m;i++){
for(j=0;j<n;j++){
//判断原始活细胞的更新状态
if(board[i][j]%10==1){
if(board[i][j]/10==2 || board[i][j]/10==3){
board[i][j]=1;
}else{
board[i][j]=0;
}
}
//判断原始死细胞的更新状态
if(board[i][j]%10==0){
if(board[i][j]/10==3){
board[i][j]=1;
}else{
board[i][j]=0;
}
}
}
}
}
}