题目描述
题解
动态规划
题目要求二维矩阵中的最大正方形, 因为各个元素之间有着比较强的联系, 所以可以使用动态规划的方法做.
刚开始定义的dp[i][j]
含义为以(i, j)结尾时的最大正方形面积, 但是相邻元素间很难直观找出面积关系, 相比之下最大的正方形边长较为明显.
状态定义:
dp[i][j]
定义为以(i,j)结尾的最大正方形边长.
状态转移:
如果当前位置的元素为0, 那么不能构成正方形, 那么dp[i][j]=0
如果当前位置的元素为1, 要么该点单独构成一个边长为1的正方形, 要么与周围的元素构成一个更大的正方形.具体的值由以下状态转移关系决定:
1 | dp[i][j] = min(左边的dp值, 上边的dp值, 斜上方的dp值) +1 |
输出:
更新dp
数组时不断记录当前的最大正方形边长, 最后将最大边长的平方输出即可
1 | public int maximalSquare(char[][] matrix) { |