美文网首页算法代码
统计全为 1 的正方形子矩阵

统计全为 1 的正方形子矩阵

作者: windUtterance | 来源:发表于2020-05-30 12:31 被阅读0次

题目描述
给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。

示例
输入:matrix =
[
[0,1,1,1],
[1,1,1,1],
[0,1,1,1]
]
输出:15
解释:
边长为 1 的正方形有 10 个。
边长为 2 的正方形有 4 个。
边长为 3 的正方形有 1 个。
正方形的总数 = 10 + 4 + 1 = 15.

首先,题目并不关心边长为1,2,...,k的各有多少个,并且我们知道,以(i, j)为右下角边长为k的正方形全为1的话,那么以(i, j)为右下角边长分别为1,2,...,k - 1的正方形区域一定是全为1,如下图:

image.png

上图中,如果红色区域是边长为3的全1正方形区域,那么它一定包含了一个边长为2和边长为1的全1正方形区域。所以,我们只需记录以(i, j)为右下角的区域包含的最大全1正方形边长即可,这个最大边长也即以(i , j)为右下角的全1正方形的个数.
那么基于此,我们就可以将原始的dp降一维度,设dp[i][j]表示以(i, j)为右下角的最大全1正方形区域的边长,则有如下状态转移方程:

dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1

作者:97wgl
链接:https://leetcode-cn.com/problems/count-square-submatrices-with-all-ones/solution/tong-ji-quan-wei-1-de-zheng-fang-xing-zi-ju-zhen-f/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Java代码

class Solution {
    public int countSquares(int[][] matrix) {
        int row = matrix.length;
        int col = matrix[0].length;
        int[][] dp = new int[row][col];
        int ans = 0;

        for(int i = 0;i < row;i++) {
            ans += dp[i][0] = matrix[i][0];
        }
        for(int j = 0;j < col;j++) {
            ans += dp[0][j] = matrix[0][j];
        }
        if(matrix[0][0] == 1) ans--;

        for(int i = 1;i < row;i++) {
            for(int j = 1;j < col;j++) {
                if(matrix[i][j] == 1) {
                    dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][ j - 1]), dp[i - 1][j - 1]) + 1;
                    ans += dp[i][j];
                }
            }
        }
        return ans;
    }
}

相关文章

  • 统计全为 1 的正方形子矩阵

    题目描述:给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方...

  • LeetCode #1277 Count Square Subm

    1277 Count Square Submatrices with All Ones 统计全为 1 的正方形子矩...

  • 1.数据分析之Numpy教程

    1.快速构造一个矩阵 构造一个3*5的全为0的矩阵 构造一个2*4的全为1的矩阵 构造一个全为666的矩阵 构造一...

  • 动态规划:01矩阵中全为1的最大正方形边长

    问题描述 在一个二维0 1矩阵中找到全为1的最大正方形,返回其边长。 输入: 输出: 思路: 动态规划,构造一个等...

  • LeetCode 221 [Maximal Square]

    原题 在一个二维01矩阵中找到全为1的最大正方形 样例 返回 4 解题思路 动态规划 dp[i][j]跟左上,左,...

  • 最大正方形

    在一个二维01矩阵中找到全为1的最大正方形您在真实的面试中是否遇到过这个题?Yes样例1 0 1 0 01 0 1...

  • 第三节矩阵运算

    1矩阵运算 2矩阵运算 3向量和矩阵的运算 4矩阵的逆 逆矩阵与原矩阵相乘得到单位矩阵,对角线全为1,其他元素为0...

  • 5454. 统计全 1 子矩形

    题目 5454. 统计全 1 子矩形 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ...

  • 旋转正方形矩阵

    旋转正方形矩阵 【题目】 给定一个整型正方形矩阵matrix,请把该矩阵调整成顺时针旋转90度的样子。【要求】 额...

  • list_ndarray_csr_lil占用空间比较

    feature为(3312, 3312)的稀疏特征矩阵,里面的值全为0或1。由于比较好奇各种存储矩阵的方式之间占用...

网友评论

    本文标题:统计全为 1 的正方形子矩阵

    本文链接:https://www.haomeiwen.com/subject/xjyczhtx.html