今天这道题看了好久的题解,才理解意思,看来有的时候刷题也要积累一些知识。

class Solution:
    def gameOfLife(self, board: List[List[int]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        import numpy as np
        r, c = len(board), len(board[0])
        
        board_exp = np.array([[0 for _ in range(c + 2)] for _ in range(r + 2)])
        board_exp[1:1 + r, 1:1 + c] = np.array(board)
        
        kernel = np.array([1, 1, 1], [1, 0, 1], [1, 1, 1])
        
        for i in range(1, r + 1):
            for j in range(1, c + 1):
                temp_sum = np.sum(kernel * board_exp[i - 1:i + 2, j - 1:j + 2])
                if board_exp[i, j] == 1:
                    if temp_sum < 2 or temp_sum > 3:
                        board[i - 1][j - 1] = 0
                 else:
                    if temp_sum == 3:
                        board[i - 1][j - 1] = 1

这道题用的是卷积的方法,一开始通过遍历来添加两行两列(如果有多出来的行或者列,则去掉,因为矩阵是一个行列相同的),因为需要的是周围的8个数,然后再通过切片将原来的矩阵复制到新的矩阵中,然后关键的是卷积的一个矩阵,[1, 1, 1], [1, 0, 1],[1, 1, 1],然后将切片的每个矩阵与kernel相乘,注意这里面是每个相乘,因为这相当与是将原矩阵的每个值都判断一下。然后做一个判断,就可以得出答案。

你可能感兴趣的:(python,leetcode,算法)