我觉得我写的代码很奇怪,但是过了
def maximalSquare(self, matrix: List[List[str]]) -> int:
if len(matrix) == 0:return 0
m = len(matrix)
n = len(matrix[0])
dp = [[0 for j in range(1+n)] for i in range(1+m)]
mS = 0
for ii in range(m):
for ji in range(n):
val = matrix[ii][ji]
i = ii+1
j = ji+1
if val == '1':
ms = min(dp[i][j-1],dp[i-1][j],dp[i-1][j-1])
dp[i][j] = 1+ms+2*int(pow(ms,0.5))
mS = max(mS,dp[i][j])
return mS
计算坐标(i,j)的矩形面积依赖于(i-1,j), (i,j-1), (i-1,j-1)的矩形面积. 对于正方形S=d2S = d^2S=d2S为面积,d为边长.
当然如下形式更好一点.
def maximalSquare(self, matrix: List[List[str]]) -> int:
if len(matrix) == 0:return 0
m = len(matrix)
n = len(matrix[0])
dp = [[0 for j in range(1+n)] for i in range(1+m)]
mS = 0
for ii in range(m):
for ji in range(n):
val = matrix[ii][ji]
i = ii+1
j = ji+1
if val == '1':
#dp为边长
dp[i][j] =1+ min(dp[i][j-1],dp[i-1][j],dp[i-1][j-1])
mS = max(mS,dp[i][j])
return mS*mS
本文探讨了一种计算矩阵中最大全'1'正方形面积的算法,并对其进行了优化。通过动态规划方法,利用矩阵中每个元素与其左、上、左上三个方向相邻元素的关系,计算出最大正方形的边长,进而求得最大面积。

7607

被折叠的 条评论
为什么被折叠?



