题目分析:
分析:
这道题目其实就是84题的变种,如下图所示:
所以在本题中,我们只需要求出每个heights[i]的值,并调用84题中的方法即可。
具体代码如下:
class Solution {
public int maximalRectangle(char[][] matrix) {
if(matrix.length == 0)
return 0;
int[] heights = new int[matrix[0].length];
int maxArea = 0;
for(int row = 0; row < matrix.length; row ++) {
for(int col = 0; col < matrix[0].length; col ++) {
if(matrix[row][col] == '1') {
heights[col] ++;
} else {
heights[col] = 0;
}
}
maxArea = Math.max(maxArea, largestRectangleArea(heights));
}
return maxArea;
}
public int largestRectangleArea(int[] heights) {
return calculateArea(heights, 0, heights.length - 1);
}
public int calculateArea(int[] heights, int left, int right) {
if (left > right)
return 0;
int minIndex = left;
for(int i = left; i <= right; i ++) {
if(heights[i] <= heights[minIndex])
minIndex = i;
}
int area = (right - left + 1) * heights[minIndex];
//递归
int sidesArea = Math.max(calculateArea(heights, left, minIndex - 1), calculateArea(heights, minIndex + 1, right));
return Math.max(area, sidesArea);
/*int leftArea = calculateArea(heights, left, minIndex - 1);
int rightArea = calculateArea(heights, minIndex + 1, right);
return Math.max(area, Math.max(leftArea, rightArea));*/
}
}