【leetcode】289. Game of Life

题目如下:

解题思路:因为本题要求的是直接在输入的数组上面修改,而且细胞的生死转换是一瞬间的事情,所以需要引入两个中间状态,待死和待活。这两个中间状态用于在四条规则判断的时候是“活”和“死”,但是呈现在最终的结果是“死”和“活”。

代码如下:

class Solution(object):
    def getLiveCount(self,board,x,y):
        l = [(0,-1),(0,1),(-1,0),(1,0),(-1,-1),(1,1),(-1,1),(1,-1)]
        count = 0
        for i in l:
            if board[x+i[0]][y+i[1]] == 1 or board[x+i[0]][y+i[1]] == 4:
                count += 1
        return count
    def gameOfLife(self, board):
        """
        :type board: List[List[int]]
        :rtype: void Do not return anything, modify board in-place instead.
        """
        # 2 means boundary
        # 3 means from dead to live
        # 4 means from live to dead
        for i in board:
            i.append(2)
            i.insert(0,2)
        l = [2] * len(board[0])
        board.append(l[::])
        board.insert(0,l[::])

        for i in range(1,len(board)-1):
            for j in range(1,len(board[i])-1):
                count = self.getLiveCount(board,i,j)
                if board[i][j] == 0 and count == 3:
                    board[i][j] = 3
                elif board[i][j] == 1 and (count < 2 or count > 3):
                    board[i][j] = 4
        for i in range(1,len(board)-1):
            for j in range(1,len(board[i])-1):
                if board[i][j] == 3:
                    board[i][j] = 1
                elif board[i][j] == 4:
                    board[i][j] = 0
        del board[0]
        del board[-1]
        for i in board:
            del i[0]
            del i[-1]

 

posted @ 2018-09-17 17:43  seyjs  阅读(182)  评论(0编辑  收藏  举报