leetcode_middle_65_289. Game of Life
来源:互联网 发布:淘宝宝贝标题敏感 编辑:程序博客网 时间:2024/05/16 05:20
题意;
给定一个由0和1组成的m*n矩阵,
当1周围的8个位置,只有小于2个1时,1变为0. 当只有2,3个1时,不变(仍为1), 当有大于3个个1时,1变为0
当0周围的8个位置,有3个1的时候,0变为1.
计算这个矩阵下一个状态。
分析:
不能用额外的空间,这个要求即是让人第一时间懵逼,也是让人第二时间想到解法的要求——因为无路可走,只能利用本身的值来存储信息。
但是由于要一次更新,所以我们要存储两个信息:一个是本身的,第二个是要改变的。
这很好办,比如:
要变 设为-1
0 不变 设为0
1 要变 设为2
不变 设为1
所以我们在遇到2的时候当做1。遇到-1的时候当做0
最后根据信息来改变就可以了。
小结:以后可以自发的从信息隐藏的角度来思考思考。
public class Solution { public void gameOfLife(int[][] board) { if(board.length == 0){ return; } for(int i=0;i<board.length;i++){ for(int j=0;j<board[0].length;j++){ setFlag(board,i,j); } } for(int i=0;i<board.length;i++){ for(int j=0;j<board[0].length;j++){ doChange(board,i,j); } } } public static void setFlag(int[][]board,int i,int j){ int count=0; for(int p=i-1;p<=i+1;p++){ for(int q=j-1;q<=j+1;q++){ if((p!=i || q!=j) && p>=0 && p<board.length && q>=0 && q<board[0].length && board[p][q]>=1) count++; } } if(board[i][j] == 0 && count==3){ board[i][j] = -1; }else if(board[i][j] == 1 && (count<2 || count>3)){ board[i][j] = 2; } } public static void doChange(int[][]board,int i,int j){ if(board[i][j] == -1){ board[i][j] = 1; }else if(board[i][j] == 2){ board[i][j] = 0; } } }
0 0
- leetcode_middle_65_289. Game of Life
- Game of Life
- Game Of Life
- LeetCode:Game of Life
- LeetCode: Game of Life
- Game of Life
- leetcode289 : Game of Life
- 【LeetCode】Game of Life
- Game of Life
- Game of Life
- LeetCode Game of Life
- Leetcode Game of Life
- Game of Life
- Game of Life
- [289]Game of Life
- [LeetCode] Game of Life
- Game Of Life
- LeetCode -- Game of Life
- JAVA中的string---(转载自 ---- 平凡希)
- 关于C++ Builder中TChart的一些用法[转载]
- 8位数码管动态扫描显示
- springmvc-学习总结-非注解式处理器和映射器
- Gazebo 详细介绍
- leetcode_middle_65_289. Game of Life
- Error: (unix time) try if you are using GNU date
- C++中的string
- POJ 3617 (贪心)
- 终极对决beef之信息提取(4)
- 关于MySQL的TPS和QPS
- 历届试题 格子刷油漆
- Javascript中bind()方法的使用与实现
- ARP地址解析协议