【leetcode系列】【算法】【中等】生命游戏

题目:

题目链接: https://leetcode-cn.com/problems/game-of-life/

解题思路:

方法一: 使用额外的空间,来保存原始数组,此额外的数组不进行任何变动,用来对九宫格的数据进行判断

方法二:添加额外的状态来判断修改前的状态,需要额外循环一次更新状态

  1. 0 : 死
  2. 1 : 生
  3. 2 : 死 => 生
  4. 3 : 生 => 死

代码实现:

class Solution:
    def gameOfLife(self, board: List[List[int]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        """
        0 : dead
        1 : live
        2 : dead -> live
        3 : live -> dead
        """
        live_state = [1, 3]
        dead_state = [0, 2]
        def get_state(i, j, board):
            ret = 0
            if i >= 0 and i < len(board) and j >= 0 and j < len(board[0]):
                if board[i][j] in live_state:
                    ret = 1
                else:
                    ret = 0

            return ret

        def get_live_num(i, j, board):
            live_num = 0
            # upper left
            live_num += get_state(i - 1, j - 1, board)

            # upper
            live_num += get_state(i - 1, j, board)
            
            # upper right
            live_num += get_state(i - 1, j + 1, board)
            
            # left
            live_num += get_state(i, j - 1, board)
            
            # right
            live_num += get_state(i, j + 1, board)
            
            # lower left
            live_num += get_state(i + 1, j - 1, board)
            
            # lower
            live_num += get_state(i + 1, j, board)
            
            # lower right
            live_num += get_state(i + 1, j + 1, board)
            return live_num


        for i in range(0, len(board)):
            for j in range(0, len(board[0])):
                live_num = get_live_num(i, j, board)
                if 0 == board[i][j] and 3 == live_num:
                    board[i][j] = 2
                elif 1 == board[i][j] and (live_num < 2 or live_num > 3):
                    board[i][j] = 3
                    
        for i in range(0, len(board)):
            for j in range(0, len(board[0])):
                if board[i][j] == 2:
                    board[i][j] = 1
                elif board[i][j] == 3:
                    board[i][j] = 0
发布了100 篇原创文章 · 获赞 4 · 访问量 1476

猜你喜欢

转载自blog.csdn.net/songyuwen0808/article/details/105283310
今日推荐