描述
给出一个只包含0和1的二维矩阵,找出最大的全部元素都是1的长方形区域,返回该区域的面积。
class Solution {
public:
int cal(vector<vector<char> > &matrix,int i,int j){//计算一(i,j)为左上角点构成的矩形的最大面积
int rows=matrix.size();
int cols=matrix[0].size();
int res=1;
for(int r=i;r<rows;r++){
if(matrix[r][j]=='0')//如果某一行的开始为0,则不再向下寻找,直接退出
break;
for(int c=j;c<cols;c++){//在行数确定的情况下,看列数可以构成的最大的矩形面积是多少
bool flag=true;
for(int k=i;k<=r;k++){
if(matrix[k][c]=='0'){
flag=false;
break;
}
}
if(flag==true){//如果在行数确定的情况下,所有的列为1,则计算此时的面积
int area=(r-i+1)*(c-j+1);
if(res<area)
res=area;
}
else
break;
}
}
return res;
}
int maximalRectangle(vector<vector<char> > &matrix) {
int rows=matrix.size();
int cols=matrix[0].size();
int res=0;
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
if(matrix[i][j]=='1'){
int tmp=cal(matrix,i,j);
if(res<tmp)
res=tmp;
}
}
}
return res;
}
};