题目: 难度 中等
给你一个 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.
思路
(i,j)为右下角位置的正方形个数与 (i,j-1) (i-1, j)(i-1, j-1)有关,(i,j)的个数是这三个位置中的最小值(注意当(i,j)为1时才有)。直接原地操作
lass Solution: def countSquares(self, matrix: List[List[int]]) -> int: n = len(matrix[0]) m = len(matrix) #count =[[0]*n for i in range(m)] c=0 for i in range(n): #count[0][i] = matrix[0][i] c+=matrix[0][i] for i in range(1,m): c+=matrix[i][0] for i in range(1,m): for j in range(1,n): matrix[i][j] += matrix[i][j]*(min(matrix[i][j-1],min(matrix[i-1][j],matrix[i-1][j-1]))) c+=matrix[i][j] # print(c) return c