Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.
For example, given the following matrix:
1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
Return 4.
思路:
public int maximalSquare(char[][] matrix) {
if (matrix.length == 0) return 0;
int m = matrix.length, n = matrix[0].length, result = 0;
//b[i][j] is the edge length of the largest square ENDING at position (i,j)
int[][] b = new int[m + 1][n + 1];
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (matrix[i - 1][j - 1] == '1') {
b[i][j] = Math.min(Math.min(b[i-1][j], b[i][j-1]), b[i-1][j-1]) + 1;
result = Math.max(b[i][j], result);
}
}
}
return result * result;
}
参考 https://discuss.leetcode.com/topic/20801/extremely-simple-java-solution
图来自http://www.68idc.cn/help/buildlang/ask/20150625384125.html