leetcode-289

主要的问题是我们需要用上一个状态来判断当前状态。因为可能因为你变1之后影响其他的。

Perhaps that’s been the story of life

func gameOfLife(board [][]int) {
    temp := make([][]int, len(board))
    for i := 0; i < len(board); i++ {
        temp[i] = make([]int, len(board[i]))
    }
    for i := 0; i < len(board); i++ {
        for j := 0; j < len(board[0]); j++ {
            nums := 0
            // 上面
            if i - 1 >= 0 {
                nums += board[i-1][j]
            }
            // 左面
            if j - 1 >= 0 {
                nums += board[i][j-1]
            }
            // 下面
            if i + 1 < len(board) {
                nums += board[i+1][j]
            }
            // 右面
            if j + 1 < len(board[i]) {
                nums += board[i][j+1]
            }
            // 左上
            if i - 1 >= 0 && j - 1 >= 0 {
                nums += board[i-1][j-1]
            }
            // 右上
            if i - 1 >= 0 && j + 1 < len(board[i]) {
                nums += board[i-1][j+1]
            }
            // 左下
            if i + 1 < len(board) && j - 1 >= 0  {
                nums += board[i+1][j-1]
            }
            // 右下
            if j + 1 < len(board[i]) && i + 1 < len(board) {
                nums += board[i+1][j+1]
            }
            temp[i][j] = board[i][j]
            switch {
            case nums < 2:
                temp[i][j] = 0
            case nums == 3 && temp[i][j] == 0:
                temp[i][j] = 1
            case nums > 3:
                temp[i][j] = 0
            }
        }
    }
    copy(board, temp)
}

end

猜你喜欢

转载自www.cnblogs.com/CherryTab/p/12623951.html