Given a 2D binary matrix filled with 0's and 1's, find the largest square containing
all 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 0Return 4.
可以用动态规划来解决。更新的条件是:t[i][j] = min(t[i][j-1], t[i-1][j], t[i-1][j-1]) + 1.
意思是square在这个点之前.
public int maximalSquare(char[][] matrix) {
if(matrix==null||matrix.length<=0)
return 0;
int m=matrix.length;
int n=matrix[0].length;
int[][] result=new int[m][n];
for(int i=0;i<m;i++)
result[i][0]=Character.getNumericValue(matrix[i][0]);
for(int i=0;i<n;i++)
result[0][i]=Character.getNumericValue(matrix[0][i]);
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
if(matrix[i][j]=='1'){
int min=Math.min(result[i][j-1], result[i-1][j]);
min=Math.min(min, result[i-1][j-1]);
result[i][j]=min+1;
}else
result[i][j]=0;
}
}
int max=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(result[i][j]>max)
max=result[i][j];
}
}
return max*max;
}