我觉得我写的代码很奇怪,但是过了
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
=
d
2
S = d^2
S=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