题意:给出一个只包含0或1的二维矩阵,求矩阵中出现全为1的正方形的面积。
分析:动态规划。设dp[i][j]表示以matrix[i][j]为右下角的正方形的最大边长,转移方程为
代码:
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int row=matrix.size();
if(row==0) return 0;
int col=matrix[0].size();
vector<int> c(col,0);
vector<vector<int>> dp(row,c);
for(int i=0;i<row;++i) dp[i][0]=matrix[i][0]-'0';
for(int i=0;i<col;++i) dp[0][i]=matrix[0][i]-'0';
for(int i=1;i<row;++i) for(int j=1;j<col;++j) if(matrix[i][j]=='1') dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
int ans=0;
for(int i=0;i<row;++i) for(int j=0;j<col;++j) if(ans<dp[i][j]) ans=dp[i][j];
return ans*ans;
}
};