python 练习题 289. 生命游戏

地址:https://leetcode.cn/problems/game-of-life/

 

 1 '''
 2 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:
 3 
 4 如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡; ==1 < 2  0
 5 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;==1 ==2 ==3 1
 6 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡; ==1 >3 0
 7 如果死细胞周围正好有三个活细胞,则该位置死细胞复活; ==0 ==3 1
 8 下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。给你 m x n 网格面板 board 的当前状态,返回下一个状态。
 9 
10 思路:
11 1.将board copy一份,然后将四周加0补充,这样就不会考虑边界问题
12 2.判断周围8个相加,满足条件,则修改board的值
13 3.需要特别注意,不要直接再复制后的值做修改,这样会影响后面的值,题目是要求 同时发生,所以,修改的值直接在board上即可
14 
15 '''
16 
17 class Solution:
18     def gameOfLife(self, board: List[List[int]]) -> None:
19         """
20         Do not return anything, modify board in-place instead.
21         """
22 
23         m = len(board)
24         n = len(board[0])
25         newS =copy.deepcopy(board)
26         for i in range(m):
27             newS[i].insert(n,0)
28             newS[i].insert(0,0)
29         newS.insert(m,[0 for i in range(n+2)])
30         newS.insert(0,[0 for i in range(n+2)])
31 
32 
33 
34         for i in range(1,m+1):
35             for j in range(1,n+1):
36                 res = newS[i-1][j] + newS[i-1][j-1] + newS[i-1][j+1] + newS[i+1][j] + newS[i+1][j-1] + newS[i+1][j+1] + newS[i][j+1] +newS[i][j-1]
37                 if newS[i][j] ==1:
38                     if res < 2:board[i-1][j-1] =0
39                     elif res >3:board[i-1][j-1] =0
40                 else:
41                     if res ==3:board[i-1][j-1] =1

 

 

 

 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/game-of-life
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
posted @ 2022-07-04 21:17  菜小鱼~  阅读(52)  评论(0编辑  收藏  举报