最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • [LeetCode221. 最大正方形] | 刷题打卡

    正文概述 掘金(叫我詹躲躲)   2021-03-07   606

    一、题目描述:

    在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

    在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。 示例 1: 输入: [LeetCode221. 最大正方形] | 刷题打卡

    matrix = [
    	["1","0","1","0","0"],
    	["1","0","1","1","1"],
    	["1","1","1","1","1"],
    	["1","0","0","1","0"]
    ]
    输出:4
    

    示例 2: 输入: [LeetCode221. 最大正方形] | 刷题打卡

    matrix = [
    	["0","1"],
    	["1","0"]
    ]
    输出:1
    

    示例 3: 输入:

    matrix = [
    	["0"]
    ]
    输出:0
    

    提示:

        m == matrix.length
        n == matrix[i].length
        1 <= m, n <= 300
        matrix[i][j] 为 '0' 或 '1'
    

    二、思路分析:

    2.1 动态规划法分析:

    1.如果matrix[i][j]等于0,那么就不用看了,直接等于0。

    2.如果matrix[i][j]等于1,那么我们将matrix[[i][j]] 分别往上和往左进行延伸,直到碰到一个0为止。

    3.当前数组为1的时候 dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1 //判断左上,左下,右上是否有0

    [LeetCode221. 最大正方形] | 刷题打卡

    三、AC 代码:

    javascript

    /**
     * @param {character[][]} matrix
     * @return {number}
     */
    var maximalSquare = function (matrix) {
        if (!matrix.length || !matrix[0].length) return 0
        var maxSlideLen = 0, //记录最长边
            dp = Array(matrix.length); //构建dp数组
        for (var i = 0; i < matrix.length; i++) {
            dp[i] = Array(matrix[0].length).fill(0); //填充每一位为0
            for (let j = 0; j < matrix[0].length; j++) {
                if (matrix[i][j] === 1) {
                    if (i === 0 || j === 0) {
                        dp[i][j] = 1; // 第一列和第一行的dp值为1
                    } else {
                        dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1 //判断左上,左下,右上是否有0
                    }
                    maxSlideLen = Math.max(maxSlideLen, dp[i][j]) //更新最大边长
                }
            }
        }
        return maxSlideLen ** 2 //求最大边长面积
    };
    

    python

    class Solution(object):
        def maximalSquare(self, matrix):
            """
            :type matrix: List[List[str]]
            :rtype: int
            """
            if len(matrix)==0 or len(matrix[0])==0:
                return 0
            maxSlide=0
            rows,cols = len(matrix),len(matrix[0])
            dp = [[0]*(cols+1) for i in range(rows+1)]
            for i in range(1,rows+1):
                for j in range(1,cols+1):
                    if matrix[i-1][j-1] == '1':
                        dp[i][j] = min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1 ## 判断左上,左下,右上是否有0
                        maxSlide = max(maxSlide, dp[i][j]) ## 更新最大边长
            return maxSlide*maxSlide
    
    

    起源地下载网 » [LeetCode221. 最大正方形] | 刷题打卡

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元