在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
示例:
输入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0输出: 4
参考Leetcode题解,详细解析可以查看原链接;
dp[i][j]= min(dp[i- 1][j- 1], min(dp[i- 1][j], dp[i][j- 1]))+ 1
可以看成是取以dp[i- 1][j- 1],dp[i- 1][j],dp[i][j- 1]为右下角的三个正方形的最小边长(可能为0)
class Solution {
public:
int maximalSquare(vector>& matrix) {
// 边界判断
if(matrix.size()== 0|| matrix[0].size()== 0) return 0;
int row= matrix.size(), col= matrix[0].size();
vector > dp(row, vector(col, 0));
int result= 0;
for(int i= 0; i< row; ++i){
for(int j= 0; j< col; ++j){
if(matrix[i][j]== '1'){
// 如果为i= 0或j= 0的边就直接赋值
if(i== 0|| j== 0)
dp[i][j]= 1;
else
dp[i][j]= min(dp[i- 1][j- 1], min(dp[i- 1][j], dp[i][j- 1]))+ 1;
result= max(result, dp[i][j]);
}
}
}
return result* result;
}
};