【LeetCode】221. Maximal Square

Problem Link

概览

一个典型的2D平面上的动态规划问题。给定一个仅有01矩阵,找出其中最大的,仅包含1的正方形。

动态规划

状态定义:

定义DP[i][j]表示矩阵M中以位置(i, j)为右下角的最大的正方形的边长。

状态转移方程:

由上述状态定义可知,当M[i][j] == 0时,DP[i][j] = 0;否则DP[i][j]DP[i - 1][j]DP[i][j - 1]DP[i - 1][j - 1]中的最小值决定——考虑这三个值相等时,DP[i][j]可以组合使边长增加1,同时若这三个值不同时增加,都无法再增加DP[i][j]的值。

因此,状态转移方程表示为:

1
2
3
DP[i][j] == 0 if M[i][j] == 0
DP[i][j] == M[i][j] if i == 0 || j == 0
DP[i][j] == min{DP[i - 1][j], DP[i][j - 1], DP[i - 1][j - 1]} + 1 if i > 0 && j > 0 && M[i][j] == 1

算法的时间复杂度为$O(MN)$,空间复杂度为$O(MN)$,其中输入矩阵为$M \times N$的矩阵。

附录

我的解答