在一个二维01矩阵中找到全为1的最大正方形
样例
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
返回 4
=====================================
1 1 1 0 0
1 1 1 1 1
1 1 1 1 1
1 0 0 1 0
↓
1 1 1 0 0
1 2 1 1 1
1 1 1 1 1
1 0 0 1 0
1 1 1 0 0
1 2 1 1 1
1 1 1 1 1
1 0 0 1 0
↓
1 1 1 0 0
1 2 2 1 1
1 1 1 1 1
1 0 0 1 0
每次都看遍历到的点是否为1,若为1则有可能能构成一个四方形,
此时要看该点的上边和左边及左上的最小值,如果该值不为0,则说明能够构成一个min + 1的正方形
public int maxSquare(int[][] matrix) {
int len1 = matrix.length;
int len2;
int result = 0;
if(len1 > 0)
len2 = matrix[0].length;
else
return result;
for(int i = 1 ; i<len1 ; i++){
for(int j = 1 ; j<len2 ; j++){
int min =Math.min(matrix[i-1][j],matrix[i][j-1]);
min =Math.min(matrix[i-1][j-1],min);
if(min>=matrix[i][j]&& matrix[i][j]==1){
matrix[i][j] = min + 1 ;
result = matrix[i][j] >result ? matrix[i][j]:result;
}
}
}
if(result==0)
for(int i = 0 ; i<len1 ; i++)
for(int j = 0 ; j<len2 ;j++)
if(matrix[i][j] == 1)return 1;
return result*result;
}