在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
示例:
输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4
DP
class Solution:
def maximalSquare(self, matrix):
"""
dp[i][j]表示以第i行第j列为右下角所能构成的最大正方形边长, 则递推式为:
dp[i][j] = 1 + min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1])
"""
row = len(matrix)
if row < 1:
return 0
col = len(matrix[0])
Max = 0
dp = [[0 for _ in range(col+1)]for _ in range(row+1)]
for i in range(1,row+1):
for j in range(1,col+1):
if matrix[i-1][j-1] == '1':
dp[i][j] = 1 + int(min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]))
Max = max(Max,dp[i][j])
return Max ** 2