统计全为 1 的正方形子矩阵给你一个 m n 的矩阵矩阵中的元素不是 0 就是 1请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。示例 1: 输入:matrix = 0111 1111 0111 输出:15 解释: 边长为 1 的正方形有 10 个。 边长为 2 的正方形有 4 个。 边长为 3 的正方形有 1 个。 正方形的总数 = 10 + 4 + 1 = 15 示例
算法:动态规划
设 dp[i][j] 表示以 (i,j) 为右下角的正方形的最大边长,则有:
- 若 matrix[i][j] == 0,则 dp[i][j] = 0
- 否则,dp[i][j] 的值取决于其左边,上边和左上角的三个位置的 dp 值,即 dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
时间复杂度:O(mn),其中 m 和 n 分别为矩阵的行数和列数。
空间复杂度:O(mn),需要一个大小为 m*n 的二维数组存储 dp 值。
Python 代码:
原文地址: https://www.cveoy.top/t/topic/brKc 著作权归作者所有。请勿转载和采集!