最大正方形
题目描述
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
题目分析
输入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
输出: 4。
思路(一)
/**
* @param {character[][]} matrix
* @return {number}
*/
var maximalSquare = function(matrix) {
//dp[i][j]以第i行第j列为正方形右下角所能构建最大正方形的边长
if(matrix === null || matrix.length === 0 || matrix[0].length === 0) return 0;//首先对输入[]进行判断
let maxSide = 0;
let m = matrix.length;
let n = matrix[0].length;
let dp = Array.from({length:m},() => new Array(n).fill(0));//初始化m行n列矩阵每个元素为0
for(let i = 0; i < m; i++) {
for(let j = 0; j < n; j++) {
if(matrix[i][j] === '1') { //不能直接初始化第一行第一列为1,因为如果当前矩阵元素不为1就不能组成正方形
if(i === 0|| j === 0) { //初始化第一行和第一列,如果原数组中此位置的值为1,则第一列和第一行的dp值为1,第一行第一列不能够成正方形,不包含在下面的dp方程中,需要单独初始化,以便其余的行和第一行第一列够成正方形
dp[i][j] = 1;
} else {
dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]) + 1;
}
maxSide = Math.max(dp[i][j],maxSide);
}
}
}
return maxSide * maxSide;
};