假设我们有一个二维二进制矩阵,其中1表示活细胞,0表示死细胞。一个单元的邻居是它的直接水平,垂直和对角单元。我们必须使用这些规则找到矩阵的下一个状态
任何有两个或三个活着邻居的活细胞都可以生活。
具有三个活着邻居的任何死细胞都将成为活细胞。
所有其他细胞死亡。
所以,如果输入像
1 | 1 | 0 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 1 | 0 | 1 |
那么输出将是
1 | 1 | 0 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 |
为了解决这个问题,我们将遵循以下步骤:
n:=矩阵的行大小,m:=矩阵的列大小
res:=大小为nxm的矩阵,并用0填充
对于0到n范围内的i,执行
s:= 0
如果matrix [i,j]等于0,则
除此以外,
或h在j-1至j + 1的范围内,执行
s:= s +矩阵[k,h]
如果0 <= k <n和0 <= h <m
对于范围i-1至i + 1的k
res [i,j]:= [0,1,当s与3相同时为真]
res [i,j]:= 1
对于范围j-1至j + 1中的h
s:= s +矩阵[k,h]
如果0 <= k <n和0 <= h <m
对于范围i-1至i + 1的k
如果s是3或4,则
对于0到m范围内的j,执行
返回资源
让我们看下面的实现以更好地理解:
class Solution: def solve(self, matrix): n, m = len(matrix), len(matrix[0]) res = [[0 for j in range(m)] for i in range(n)] for i in range(n): for j in range(m): s = 0 if matrix[i][j] == 0: for k in range(i - 1, i + 2): for h in range(j - 1, j + 2): if 0 <= k < n and 0 <= h < m: s += matrix[k][h] res[i][j] = [0, 1][s == 3] else: for k in range(i - 1, i + 2): for h in range(j - 1, j + 2): if 0 <= k < n and 0 <= h < m: s += matrix[k][h] if s in [3, 4]: res[i][j] = 1 return res ob = Solution()matrix = [ [1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [1, 1, 0, 1] ] print(ob.solve(matrix))
[[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 1], [1, 1, 0, 1] ]
输出结果
[[1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [1, 1, 0, 0]]