在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
示例:
输入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
输出: 4
tips:二维动态规划,递推方程:
dp[i][j]=min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if(matrix.size()<=0) {
return 0;
}
int max_edge=0;
vector<vector<int>> dp(matrix.size(),vector<int>(matrix[0].size(),0));
for (int i = 0; i < matrix.size(); i++)
{
for (int j = 0; j < matrix[0].size(); j++)
{
if(i==0||j==0) {
if(matrix[i][j]=='1') {
dp[i][j]=1;
if(dp[i][j]>max_edge) {
max_edge=dp[i][j];
}
} else {
dp[i][j]=0;
}
} else if(matrix[i][j]=='1') {
int min_two=min(dp[i][j-1],dp[i-1][j]);
dp[i][j]=min(min_two,dp[i-1][j-1])+1;
if(dp[i][j]>max_edge) {
max_edge=dp[i][j];
}
}
}
}
return max_edge*max_edge;
}
};