假设我们有一个二进制矩阵,则必须在该给定矩阵中找到最大的1的平方。
所以,如果输入像
1 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 | 0 |
那么输出将为16。
为了解决这个问题,我们将遵循以下步骤-
res:= 0
对于0到矩阵大小的范围内的i
res:= res和matrix [i,0]的最大值
对于范围从0到矩阵[0]大小的i,执行
res:= res和matrix [0,i]的最大值
对于范围在1到矩阵行数的i,执行
如果matrix [i,j]与1相同,则
res = res和matrix [i,j]的最大值
矩阵[i,j] =(矩阵[i-1,j],矩阵[i-1,j-1]和矩阵[i,j-1])的最小值+ 1
对于范围1到矩阵的列数的j,执行
返回res ^ 2
让我们看下面的实现以更好地理解-
class Solution: def solve(self, matrix): res = 0 for i in range(len(matrix)): res = max(res, matrix[i][0]) for i in range(len(matrix[0])): res = max(res, matrix[0][i]) for i in range(1, len(matrix)): for j in range(1, len(matrix[0])): if matrix[i][j] == 1: matrix[i][j] = min(matrix[i - 1][j], matrix[i - 1][j - 1], matrix[i][j - 1]) + 1 res = max(res, matrix[i][j]) return res * res ob = Solution()matrix = [ [1, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0] ] print(ob.solve(matrix))
matrix = [ [1, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0] ]
输出结果
16