一、题目
在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。
二、示例
输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:4
输入:matrix = [["0","1"],["1","0"]]
输出:1
输入:matrix = [["0"]]
输出:0
三、思路
本题应该新建一个二维数组,并且将其填充0,用来表示整个正方形的中当前元素所能组成的最大正方形的边长。并且如果进行遍历的时候,maxtrix
当前位置的值为1
,如果其位置为第一行或者第一列,应该将新建的二维数组的值设置为1,并且在后面进行遍历的时候,存在这种关系:newArr[i][j] = Math.min(newArr[i][j-1], newArr[i -1][j], newArr[i -1][j - 1]) + 1
。
四、代码
/**
* @param {character[][]} matrix
* @return {number}
*/
var maximalSquare = function (matrix) {
let res = 0
let row = matrix.length
let col = matrix[0].length
let newArr = new Array(row).fill(0).map(item => new Array(col).fill(0))
for (let i = 0; i < row; i++) {
for (let j = 0; j < col; j++) {
if (matrix[i][j] === '1') {
if (i === 0 || j === 0) {
newArr[i][j] = 1
res = Math.max(res, newArr[i][j])
} else {
newArr[i][j] = Math.min(newArr[i][j - 1], newArr[i - 1][j], newArr[i - 1][j - 1]) + 1
res = Math.max(res, newArr[i][j])
}
}
}
}
return res * res
};
五、总结
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123530277
内容来源于网络,如有侵权,请联系作者删除!