题目描述
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximal-square
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
示例:
输入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
输出: 4
思路
dp
状态表示:
dp[i][j] 以第ij位置为右下角的正方的最大边长
状态计算
dp[i][j] = min(dp[i-1][j], dp[i-1][j-1], dp[i][j-1]) + 1
代码
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if(matrix.size() == 0 || matrix[0].size() == 0)
return 0;
int maxSide = 0;
int row = matrix.size();
int col = matrix[0].size();
vector<vector<int>> dp(row , vector<int>(col,0));
for(int i = 0; i < row; i++)
{
for(int j = 0; j <col; j++)
{
if(matrix[i][j] == '1')
{
if (i == 0 || j == 0)
{
dp[i][j] = 1;
}
else
{
dp[i][j] = min({dp[i-1][j],dp[i-1][j-1],dp[i][j-1]}) + 1;
}
maxSide = max(maxSide,dp[i][j]);
}
}
}
return maxSide * maxSide;
}
};