221. 最大正方形
分析
-
初始化:
- n 和 m 分别为矩阵的行数和列数。
- 状态表示:
f[i][j]
表示以matrix[i-1][j-1]
为右下角的最大正方形的边长
-
状态转移:
- 对于每一个
matrix[i - 1][j - 1] == '1'
,我们通过状态转移方程更新f[i][j]
的值 f[i][j]
的值是通过左边、上边和左上角的最小值加1
来计算的,表示我们可以扩展一个更大的正方形:f[i][j] = min(f[i-1][j], f[i][j-1], f[i-1][j-1]) + 1
- 对于每一个
-
更新最大边长:
- 每次更新
f[i][j]
时,比较当前f[i][j]
的值是否大于当前最大边长res
,如果大于,则更新res
- 每次更新
-
返回结果:
- 最终返回的结果是
res * res
,即最大正方形的面积
- 最终返回的结果是
时间复杂度
时间复杂度 O(n * m)
空间复杂度
空间复杂度为 O(n * m)
C++代码
|
|