解题思路: 先来看一下暴力的解法:枚举每个子矩阵,判断它是否全为1,时间复杂度为O(n^6),显然无法通过本题。 考虑优化,我们可以使用动态规划来解决这个问题。 我们定义状态dp[i][j]表示以(i,j)为右下角的正方形的最大边长。 显然,dp[i][j]最小为1,当matrix[i][j]=1时,可以从它的上面、左面、左上角的三个位置转移而来,即dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;。 那么以(i,j)为右下角的正方形的个数就可以通过dp[i][j]计算得到,即以(i,j)为右下角的正方形的个数为dp[i][j]。 最后,我们只需要求出所有dp[i][j]的和即可。时间复杂度为O(n^2)。

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

原文地址: https://www.cveoy.top/t/topic/buoz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录