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

题目:  难度 中等

  给你一个 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

  

 

posted @ 2020-05-20 11:44  SuckChen  阅读(369)  评论(0编辑  收藏  举报