您的位置:首页 > Web前端

Game of Life

2016-06-24 15:59 435 查看
对于这种题,真要遇上了就认命了。参考点击打开链接,后续的问答,继续关注。

这道题,

关键在于能想到,状态转变

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;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: