i j 表示正方形的右下角的坐标 === >dp[i][j]代表的是正方形的边长。
其实画图可以看出,这个边长取决于min(dp[i-1][j], dp[i-1][j-1], dp[i][j-1]), min的话,在min的基础上+1,目前的坐标点表示的就是正方形。
class Solution:
def solve(self , matrix ):
# write code here
n = len(matrix)
m = len(matrix[0])
dp = []
max_length = 0
for i in range(n):
dp.append([0]*m)
for i in range(n):
for j in range(m):
if i == 0:
if matrix[i][j] == "1":
dp[i][j] = 1
elif j == 0:
if matrix[i][j] == "1":
dp[i][j] = 1
elif matrix[i][j] == "1":
dp[i][j] = min(dp[i-1][j], dp[i-1][j-1], dp[i][j-1]) + 1
if dp[i][j] > max_length:
max_length = dp[i][j]
return max_length*max_length