1.题目
在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。
2.思路
动态规划
dp[i][j]表示以(i,j)为右下角的全为'1'的正方形最大边长
3.代码
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if(matrix.size()==0 || matrix[0].size()==0)
return 0;
int rows=matrix.size(),columns=matrix[0].size();
vector<vector<int>> dp(rows, vector<int>(columns));
int ans=0;
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++){
if(matrix[i][j]=='0')
continue;
if(i==0 || j==0)
dp[i][j]=1; //dp[i][j]表示以(i,j)为右下角的全为'1'的正方形最大边长
else //只有当dp[i-1][j]==dp[i][j-1]==dp[i-1][j-1],这个自增1才真正加了上去
dp[i][j]=min(min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1])+1;
ans=max(ans,dp[i][j]);
}
}
return ans*ans;
}
};