题目描述
在一个由 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)
链接:https://leetcode-cn.com/problems/maximal-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
用dp[i][j]表示到当前点为止最大正方形的边长,如果matrix[i][j]不等于0,更新dp[i][j]为dp[i][j-1],dp[i-1][j]和dp[i-1][j-1]中的最小值加一。在此过程中记录最大边长,最终平方即为结果。
代码(c++)
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int res=0;
if(matrix.size()==0) return res;
vector<vector<int> > dp(matrix.size(),vector<int>(matrix[0].size(),0));
for(int i=0;i<matrix.size();i++){
dp[i][0]=matrix[i][0]-'0';
res=max(res,dp[i][0]);
}
for(int i=0;i<matrix[0].size();i++){
dp[0][i]=matrix[0][i]-'0';
res=max(res,dp[0][i]);
}
for(int i=1;i<matrix.size();i++){
for(int j=1;j<matrix[0].size();j++){
if(matrix[i][j]=='1'){
dp[i][j]=min(dp[i-1][j],min(dp[i-1][j-1],dp[i][j-1]))+1;
res=max(res,dp[i][j]);
}
}
}
return res*res;
}
};