在一个由0和1组成的二维矩阵内,寻找只包含1的最大正方形,并返回其面积。
例如,给出如下矩阵:
1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
返回 4.
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.
个人思路:
如果当前元素和其上、左、左上的值都大于0,则说明可构成正方形,取这四个值中最小的值加一作为当前元素值,即为当前正方形边长,最后返回最大的边长平方即可。
代码(JavaScript):
/**
* @param {character[][]} matrix
* @return {number}
*/
var maximalSquare = function(matrix) {
var row=matrix.length;
if(row==0){
return 0;
}
var col=matrix[0].length;
var m=new Array(row);
var max=0;
for(var i=0;i<row;i++){
m[i]=new Array(col);
for(var j=0;j<col;j++){
m[i][j]=matrix[i][j];
max=Math.max(max,m[i][j]);
}
}
for(var i=1;i<row;i++){
for(var j=1;j<col;j++){
if(m[i][j]>0&&m[i-1][j-1]>0&&m[i-1][j]>0&&m[i][j-1]>0){
m[i][j]=Math.min(Math.min(m[i-1][j-1],m[i-1][j]),m[i][j-1])+1;
max=Math.max(max,m[i][j]);
}
}
}
return max*max;
};