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.
一刷
题解:由于是问能框住1的最大矩形的面积,于是我们用dynamic programming
如果a[i][j]==‘1’, 那么dp[i][j] = Math.min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1
public class Solution {
public int maximalSquare(char[][] a) {
if(a.length == 0) return 0;
int m = a.length, n = a[0].length, result = 0;
int[][] b = new int[m+1][n+1];
int max = 0;
for(int i=1; i<=m; i++){
for(int j=1; j<=n; j++){
if(a[i-1][j-1] == '1'){
b[i][j] = Math.min(Math.min(b[i][j-1], b[i-1][j-1]), b[i-1][j])+1;
max = Math.max(max, b[i][j]);
}
}
}
return max*max;
}
}