思路1 用第二位存储下一阶段的状态

如果复制一个board来计算新状态,空间复杂度是O(mn)。而这种思路是常数空间复杂度。时间复杂度都是O(mn)

细胞的两种状态01只用到了第一位。注意count的数量不但包括周围八个,也包括了board[i][j]本身

首先明确可以或的情况,简化一下就是:

  • 周围有三个,则不论ij生死,新阶段都可以活

  • 周围有两个,则ij生,新阶段也可以活

``

上面的判断里,

(board[i][j] == 0 && count == 3) || (board[i][j] == 1 && count == 3 || count == 4)

上面的判断可以优化为

(count == 3 || (count == 4 && board[i][j] == 1))

  • 如果ij当前是0,则必有count=3,周围有三个,所以新阶段可以活

  • 如果ij当前是1

    • count=3,周围有两个,新阶段活

    • count=4,周围有三个,新阶段活

Last updated