1、
// class Solution {
// public:
// int maximalSquare(vector<vector<char>>& matrix) {
// if (matrix.size() == 0 || matrix[0].size() == 0) {
// return 0;}
// int n=matrix.size();
// int m=matrix[0].size();
// int ans=0;
// int maxSide=0;
// vector<vector<int>> f(n,vector<int>(m));
// for(int i=0;i<m;i++)
// {
// for(int j=0;j<m;j++)
// {
// // if(i==0||j==0)
// // {
// // f[i][j]=matrix[i][j];
// // }
// // else if(matrix[i][j]==0)
// // {
// // f[i][j]=0;
// // }
// // else{
// // f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1;
// // }
// // ans=max(ans,f[i][j]);
// }
// }
// int s=maxSide*maxSide;
// return s;
// }
// };
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if (matrix.size() == 0 || matrix[0].size() == 0) {
return 0;
}
int maxSide = 0;
int rows = matrix.size(), columns = matrix[0].size();
vector<vector<int>> dp(rows, vector<int>(columns));
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (matrix[i][j] == '1') {//這裏如果寫matrix[i][j] 1的ASIC 49
if (i == 0 || j == 0) {
dp[i][j] = 1;
} else {
dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
}
maxSide = max(maxSide, dp[i][j]);
}
}
}
int maxSquare = maxSide * maxSide;
return maxSquare;
}
};