枚举正方形的左上顶点,每次求出最大的可能正方形边长。
边长每加一,需要新判断一行和一列是否均是“1”。
221.最大正方形
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int m=matrix.size();
if (m==0) return 0;
int n=matrix[0].size();
if (n==0) return 0;
int ans=0;
for (int i=0;i<m;i++)
for (int j=0;j<n;j++){
if (matrix[i][j]=='1'){
ans=max(ans,1);
int now=1;
bool flag=true;
while (true){
if (i+now>=m || j+now>=n){
flag=false;
break;
}
for (int i1=i;i1<=i+now;i1++){
if (matrix[i1][j+now]=='0'){
flag=false;
break;
}
}
if (flag){
for (int j1=j;j1<=j+now;j1++){
if (matrix[i+now][j1]=='0'){
flag=false;
break;
}
}
}
if (!flag) break;
now++;
}
now--;
ans=max(ans,(1+now)*(1+now));
}
}
return ans;
}
};