还是要感谢这篇文章对我这类题型的帮助:http://www.cnblogs.com/fstang/archive/2013/05/19/3087746.html
这题没有用到剪枝也过了。 为了加快速度,可以剪枝。
public class Solution {
int[][] map;
public int maxOfCol(int col, int rows) {
int max = 0;
for(int i = 0; i < rows; i++) {
if(map[i][col] == 0) continue;
int height = 1;
for(int j = i - 1; j >= 0; j--) {
if(map[j][col] >= map[i][col]) height ++ ;
else break;
}
for(int j = i + 1; j < rows; j++) {
if(map[j][col] >= map[i][col]) height ++ ;
else break;
}
int tem = map[i][col] * height;
if(tem > max) max = tem;
}
return max;
}
public int maximalRectangle(char[][] matrix) {
// Start typing your Java solution below
// DO NOT write main() function
int row = matrix.length;
if(row == 0) return 0;
int col = matrix[0].length;
map = new int[row][col];
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++) {
if (matrix[i][j] == '1') {
if (j == 0) {
map[i][j] = 1;
} else
map[i][j] = map[i][j - 1] + 1;
} else {
map[i][j] = 0;
}
}
int max = 0;
for(int i = 0; i < col; i ++) {
int tem = maxOfCol(i, row);
if(tem > max) max = tem;
}
return max;
}
}