leetcode 1277
统计全为1的正方形子矩阵
给你一个m*n
的矩阵,矩阵中的元素不是0
就是1
,请你统计并返回其中完全由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.
示例2:
输入:matrix =
[
[1,0,1],
[1,1,0],
[1,1,0]
]
输出:7
解释:
边长为 1 的正方形有 6 个。
边长为 2 的正方形有 1 个。
正方形的总数 = 6 + 1 = 7.
解法1:右下方扩展法
思路:其实一个大的正方形矩阵可以有小的正方形组成,我们对每一个正方形往左下方扩展,就能得到正方形的个数,举个例子
1,1,1,1
1,1,1,0
1,0,1,0
我们看第一个元素,往外扩展一圈,得到元素是1,1,1
,再扩展一圈,得到的是1,1,1,0,1
,发现有一个不是正方形,我们就退出扩展,返回扩展的长度1
,依次类推,就能得到正方形子矩阵的个