# 节省空间的一种方式
题目:生命游戏
思路:使用额外的数值标记新状态
已知有 0 死细胞
1 活细胞
新增 -1 存活->死亡
2 死亡->存活
最后的时候,再遍历一次,只用 0 和 1
/**
* @param {number[][]} board
* @return {void} Do not return anything, modify board in-place instead.
*/
var gameOfLife = function (board) {
// 2 复活
// -1 死亡
let row = board.length;
let col = board[0].length;
const dirs = [[-1, -1], [-1, 0], [-1, 1], [0, -1], [0, 1], [1, -1], [1, 0], [1, 1]];
for (let i = 0; i < row; i++) {
for (let j = 0; j < col; j++) {
let count = 0;
dirs.forEach(dir => {
const rowIndex = i + dir[0];
const colIndex = j + dir[1];
if (rowIndex >= 0 && rowIndex < row && colIndex >= 0 && colIndex < col && [1, -1].includes(board[rowIndex][colIndex])) {
count++;
}
})
if (board[i][j] === 0) {
if (count === 3) {
board[i][j] = 2;
}
} else if (count > 3 || count < 2) {
board[i][j] = -1;
}
}
}
for (let i = 0; i < row; i++) {
for (let j = 0; j < col; j++) {
board[i][j] = board[i][j] > 0 ? 1 : 0;
}
}
};