首页 > 其他 > 详细

LeetCode #289 生命游戏

时间:2020-04-02 12:51:06      阅读:47      评论:0      收藏:0      [点我收藏+]

题目描述

技术分享图片

分析

先复制一份题目所给的二维数组,然后遍历复制的这份数组根据每一个细胞四周的活细胞数对原数组中对应位置的细胞进行更新即可。
设一个细胞四周活细胞数为sum,题目所给的四个条件实际上相当:

  • sum < 2 || sum > 3, 无论该细胞现状态如何更新后都会死
  • sum == 2, 如果该细胞是活细胞,更新后也是活细胞;如果该细胞是死细胞,更新后也是死细胞
  • sum == 3, 如果该细胞是活细胞,更新后保持存活;如果是死细胞则更新后复活

代码

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;
                }
            }
        }
    }
};

运行结果

技术分享图片

LeetCode #289 生命游戏

原文:https://www.cnblogs.com/Nreyab/p/12618807.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!