文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 复制数组解法
    • 2.2 原地解法
    • 2.3 位运算

1. 题目

链接:289. 生命游戏

2. 解题

2.1 复制数组解法

很简单,按照题意模拟即可

class Solution {public:void gameOfLife(vector<vector<int>>& board) {if(board.empty())return;vector<vector<int>> cp(board);//复制数组法int nearby[8][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},{1, 0},  {1, 1},    {0, 1}, {-1, 1}};int m = board.size(), n = board[0].size(), i, j, k, x, y, live;for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){live = 0;for(k = 0; k < 8; ++k){x = i+nearby[k][0];y = j+nearby[k][1];if(x>=0 && x<m && y>=0 && y<n && cp[x][y])live++;}if(cp[i][j]){if(live < 2 || live > 3)board[i][j] = 0;}else{if(live == 3)board[i][j] = 1;}}}}
};

2.2 原地解法

  • 原来是1,标记成0,用2表示(等于1或者2,原状态都是1)
  • 原来是0,标记成1,用3表示(等于0或者3,原状态都是0)
  • 处理完后,改写数组
  • 等于2的,赋值为0
  • 等于3的,赋值为1
class Solution {public:void gameOfLife(vector<vector<int>>& board) {if(board.empty())return;int nearby[8][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},{1, 0},  {1, 1},    {0, 1}, {-1, 1}};int m = board.size(), n = board[0].size(), i, j, k, x, y, live;for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){live = 0;for(k = 0; k < 8; ++k){x = i+nearby[k][0];y = j+nearby[k][1];if(x>=0 && x<m && y>=0 && y<n && (board[x][y]==1 || board[x][y]==2))live++;}if(board[i][j]){if(live < 2 || live > 3)board[i][j] = 2;}else{if(live == 3)board[i][j] = 3;}}}for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){if(board[i][j] == 2)board[i][j] = 0;else if(board[i][j] == 3)board[i][j] = 1;}}}
};

2.3 位运算

  • 利用数值的低位作为原数据
  • 高位保存周围存活的数量
class Solution {public:void gameOfLife(vector<vector<int>>& board) {if (board.empty())return;int m = board.size(), n = board[0].size(), i, j, k, x, y, live;int nearby[8][2] = {{-1, 0}, {-1, -1}, {0, -1}, {1, -1},{1, 0},  {1, 1},    {0, 1}, {-1, 1}};        for (i = 0; i < m; ++i) {for (j = 0; j < n; ++j) {for (k = 0; k < 8; ++k) {x = i + nearby[k][0];y = j + nearby[k][1];if (x >= 0 && x < m && y >= 0 && y < n)board[i][j] += (board[x][y] & 1) << 1;}}}for (i = 0; i < m; ++i) {for (j = 0; j < n; ++j) {live = board[i][j] >> 1;if (live < 2 || live > 3) board[i][j] = 0;else if (live == 3)board[i][j] = 1;elseboard[i][j] &= 1;}}}
};

LeetCode 289. 生命游戏(位运算)相关推荐

  1. LeetCode 289. 生命游戏

    289. 生命游戏 思路:数每个格子周围Cell存活数 笔记:vector复制 vector<vector<int> > tmp(board); class Solution ...

  2. [leetcode][289. 生命游戏]

    根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有一个初始状态 liv ...

  3. c语言 细胞自动机,Leetcode 289. 生命游戏 (细胞自动机)

    二维网格遍历注意使用技巧让代码可读性强. 原始的思路是使用一个二维数组进行更新,当全部更新完以后,复制这个二维数组到原来的数组上. 可不可以优化,不使用额外的空间,答案是可以的 细胞的状态如下:    ...

  4. 【leetcode】289.生命游戏 (三种解法开阔思路,java实现)

    289. 生命游戏 难度中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个 ...

  5. LeetCode 0289. 生命游戏

    [LetMeFly]289.生命游戏 力扣题目链接:https://leetcode.cn/problems/game-of-life/ 根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约 ...

  6. 【LeetCode】妙用位运算解题

    [LeetCode]妙用位运算解题 文章目录 [LeetCode]妙用位运算解题 交替位二进制数★ 插入★ 数字范围按位与★★ 比特位计数★★ 下一个数★★ 消失的两个数字★★★ 修改后的最大二进制字 ...

  7. leetcode 289. Game of Life | 289. 生命游戏(Java)

    题目 https://leetcode.com/problems/game-of-life/ 题解 首先,遍历整个棋盘,如果是 1,就将上下左右的 count 值加 1. 然后,没有任何技巧,就是根据 ...

  8. LeetCode刷题:位运算(找不同 和 只出现一次的数字)

    1.常见的位运算 按位与&:(1&1=1,1&0=0,0&1=0,0&0=0); 按位或 | : (1 | 1=1,1 | 0=1,0 | 1=1,0 | 0= ...

  9. 289. 生命游戏。

    根据 百度百科 , 生命游戏 ,简称为 生命 ,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞都具有一 ...

最新文章

  1. 【AngularJS】—— 9 自定义过滤器
  2. MyEclipse设置JSP页面默认编码方式
  3. zabbix对一台主机监控的操作
  4. Go 语言编程 — 编码规范指南
  5. 1.8 循环神经网络的梯度消失-深度学习第五课《序列模型》-Stanford吴恩达教授
  6. php static method,php 类方法用static::hello(); 等同于 $this-hello();吗?
  7. php数组去空函数怎么写,分享php数组去除空值函数
  8. Spring中的InitializingBean接口的使用
  9. 启动和关闭oracle 实例,oracle实例和数据库启动与关闭.ppt
  10. RecyclerView刷新布局时Glide加载图片闪现
  11. mysql左连接查询慢
  12. 通过Matlab实现函数的简单的微分积分运算
  13. 全国社会组织信用信息公式平台(试运行)爬虫记录
  14. 元宇宙营销新时代| 元宇宙数字营销峰会于7月29日在上海淳大万丽酒店盛大开幕!
  15. 致计算机专业准大一新生
  16. SEO人员,为什么要做流量过滤,如何操作?
  17. Android Studio中Cannot resolve symbol XXX的解决方法
  18. Linux(CentOS)安装MySQL教程
  19. Msgbox信息提示框
  20. 用友增资致远1200万 国内最大OA厂商发布新品

热门文章

  1. html5证书,1+X证书Web前端开发HTML专项练习
  2. linux 编译查看链接库详情,Linux环境下的编译,链接与库的使用
  3. Android查看真机布局,android-外部存储
  4. php redis 队列,Redis 实现队列
  5. Go语言之进阶篇http服务器获取客户端的一些信息
  6. web存储机制localStorage和sessionStorage
  7. 心得 : 面向对象和面向过程的区别【分享】
  8. EBS业务学习之应收管理
  9. 转 php 观察者模式
  10. 【IEnumerable】扩展方法的使用 C#