超级暴力解法,但是采用对分的思路减少判断的次数。
class Solution {
public:
bool judgeArea(int x,int y,int radia,vector<vector<char>>& matrix)
{
for(int i=x;i<x+radia;i++)
{
for(int j=y;j<y+radia;j++)
{
if(matrix[i][j]!='1')
return false;
}
}
return true;
}
bool judge(int radia,vector<vector<char>>& matrix)
{
if(radia==0)
return true;
for(int x=0;x<=matrix.size()-radia;x++)
{
for(int y=0;y<=matrix[0].size()-radia;y++)
{
if(judgeArea(x,y,radia,matrix))
return true;
}
}
return false;
}
int maximalSquare(vector<vector<char>>& matrix) {
if(matrix.size()==0||matrix[0].size()==0)
return 0;
int m=matrix.size();
int n=matrix[0].size();
//radia
int left=0;
int right=min(m,n);
//cout<<judge(3,matrix)<<endl;
while(right-left>1)
{
int mid=left+(right-left)/2;
if(judge(mid,matrix)==true)
left=mid;
else
right=mid-1;
}
if(judge(right,matrix)==true)
return right*right;
else if(judge(left,matrix)==true)
return left*left;
else
return 0;
}
};