Game of Life
2016-06-24 15:59
435 查看
对于这种题,真要遇上了就认命了。参考点击打开链接,后续的问答,继续关注。
这道题,
关键在于能想到,状态转变
另外,每次比较都是和上一轮状态的比较。
还有,这样写,不是自己想要的结果:
//lives = lives + board[i - 1][j] == 1 || board[i - 1][j] == 2 ? 1 : 0;要么分开,要么这样写:
lives += board[i - 1][j] == 1 || board[i - 1][j] == 2 ? 1 : 0;
public class Solution {
public void gameOfLife(int[][] board) {
int m = board.length, n = board[0].length;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
int lives = 0;
//up
if (i > 0) {
//lives = lives + board[i - 1][j] == 1 || board[i - 1][j] == 2 ? 1 : 0;
lives += board[i - 1][j] == 1 || board[i - 1][j] == 2 ? 1 : 0;
}
// up right
if (i > 0 && j + 1 < n) {
lives += board[i - 1][j + 1] == 1 || board[i - 1][j + 1] == 2 ? 1 : 0;
}
// right
if (j + 1 < n) {
lives += board[i][j + 1] == 1 || board[i][j + 1] == 2 ? 1 : 0;
}
// down right
if (i + 1 < m && j + 1 < n) {
lives += board[i + 1][j + 1] == 1 || board[i + 1][j + 1] == 2 ? 1 : 0;
}
// down
if (i + 1 < m) {
lives += board[i + 1][j] == 1 || board[i + 1][j] == 2 ? 1 : 0;
}
// down left
if (i + 1 < m && j > 0) {
lives += board[i + 1][j - 1] == 1 || board[i + 1][j - 1] == 2 ? 1 : 0;
}
// left
if (j > 0) {
lives += board[i][j - 1] == 1 || board[i][j - 1] == 2 ? 1 : 0;
}
// up left
if (i > 0 && j > 0) {
lives += board[i - 1][j - 1] == 1 || board[i - 1][j - 1] == 2 ? 1 : 0;
}
if (board[i][j] == 1 && (lives < 2 || lives > 3)) {
board[i][j] = 2;
} else if (board[i][j] == 0 && lives == 3) {
board[i][j] = 3;
}
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
//board[i][j] = board[i][j] % 2 == 0 ? 0: 1;
board[i][j] = board[i][j] % 2;
}
}
}
}
这道题,
关键在于能想到,状态转变
0 : 上一轮是0,这一轮过后还是0 1 : 上一轮是1,这一轮过后还是1 2 : 上一轮是1,这一轮过后变为0 3 : 上一轮是0,这一轮过后变为1
另外,每次比较都是和上一轮状态的比较。
还有,这样写,不是自己想要的结果:
//lives = lives + board[i - 1][j] == 1 || board[i - 1][j] == 2 ? 1 : 0;要么分开,要么这样写:
lives += board[i - 1][j] == 1 || board[i - 1][j] == 2 ? 1 : 0;
public class Solution {
public void gameOfLife(int[][] board) {
int m = board.length, n = board[0].length;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
int lives = 0;
//up
if (i > 0) {
//lives = lives + board[i - 1][j] == 1 || board[i - 1][j] == 2 ? 1 : 0;
lives += board[i - 1][j] == 1 || board[i - 1][j] == 2 ? 1 : 0;
}
// up right
if (i > 0 && j + 1 < n) {
lives += board[i - 1][j + 1] == 1 || board[i - 1][j + 1] == 2 ? 1 : 0;
}
// right
if (j + 1 < n) {
lives += board[i][j + 1] == 1 || board[i][j + 1] == 2 ? 1 : 0;
}
// down right
if (i + 1 < m && j + 1 < n) {
lives += board[i + 1][j + 1] == 1 || board[i + 1][j + 1] == 2 ? 1 : 0;
}
// down
if (i + 1 < m) {
lives += board[i + 1][j] == 1 || board[i + 1][j] == 2 ? 1 : 0;
}
// down left
if (i + 1 < m && j > 0) {
lives += board[i + 1][j - 1] == 1 || board[i + 1][j - 1] == 2 ? 1 : 0;
}
// left
if (j > 0) {
lives += board[i][j - 1] == 1 || board[i][j - 1] == 2 ? 1 : 0;
}
// up left
if (i > 0 && j > 0) {
lives += board[i - 1][j - 1] == 1 || board[i - 1][j - 1] == 2 ? 1 : 0;
}
if (board[i][j] == 1 && (lives < 2 || lives > 3)) {
board[i][j] = 2;
} else if (board[i][j] == 0 && lives == 3) {
board[i][j] = 3;
}
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
//board[i][j] = board[i][j] % 2 == 0 ? 0: 1;
board[i][j] = board[i][j] % 2;
}
}
}
}
相关文章推荐
- CSS权威指南-候选样式表
- 不用jQuery做一个简单手动暂停的JavaScript幻灯片2
- PorterDuffXfermode的用法
- React Native实例
- 使用NPOI 转换Excel TO HTML (导出格式不如原生Excel好看)
- 14.4.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预读
- 14.4.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预读
- 14.4.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预读
- Caffe代码阅读笔记(1)
- jsp中添加表达式
- JavaWeb前端分页显示方法
- NewPanderKing 抬头是山,路在脚下! 一些技术大牛的博客集锦(转)
- 【总结】HDFS源码之INode相关类
- ReactJS学习系列课程1(ReactJS简介)
- jsp中通添加java代码
- JavaScript DOM
- 源码安装protocol Buffer
- javascript 中setTimeout()和clearTimeout()及setInterval()和clearInterval()的用法
- angular 1与angular2区别
- 获取非行间样式