Leetcode刷题(第221题)——最大正方形

x33g5p2x  于2022-03-16 转载在 其他  
字(1.1k)|赞(0)|评价(0)|浏览(113)

一、题目

在一个由 '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
};

五、总结

相关文章

微信公众号

最新文章

更多