我正在用Java编写程序,并且我有一个(0,1)矩阵。我想计算仅由零组成的2D数组的最大子矩形的数量。
如果A不是更大的子矩形B的子矩形,使得B也仅由零组成,则最大子矩形A。
我应该如何计算这些子矩形?
我有这段代码来检查从(顶部,左侧)开始的大小为高*宽的子矩形是否只有零,但我不知道该如何处理最大部分:
static boolean areAllZeros(int[][] matrix, int top, int left, int height, int width) {
int maxHeight = matrix.length;
int maxWidth = matrix[0].length;
int bottom = top + height;
int right = left + width;
if (bottom > maxHeight || right > maxWidth)
return false;
for (int i = top; i < bottom; ++i)
for (int j = left; j < right; ++j)
if (matrix[i][j] != 0)
return false;
return true;
}
例如,以下矩阵的答案为3:
0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0
(((1)从(0,0)开始的2 * 2矩形,(2)从(0,3)开始的2 * 5矩形和(3)从(1,0开始的1 * 8矩形))