436. 最大正方形
在一个二维01矩阵中找到全为1的最大正方形
样例
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
返回 4
解题思路:
class Solution:
"""
@param matrix: a matrix of 0 and 1
@return: an integer
"""
def maxSquare(self, matrix):
# write your code here
#尝试卷积核
if not matrix or not matrix[0]:
return 0
n, m = len(matrix), len(matrix[0])
dp = [[0] * m for _ in range(n)]
#第一行只有一个1*1矩阵
for i in range(m):
dp[0][i] = matrix[0][i]
edge = max(matrix[0])
for i in range(1, n):
#对每一行第一个值进行赋值
dp[i][0] = matrix[i][0]
for j in range(1, m):
#如果为1
if matrix[i][j]:
dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) + 1
else:
dp[i][j] = 0
#记录最大矩阵的边,
edge = max(edge, max(dp[i]))
return edge * edge