程序在python中查找带有1的平方子矩阵数

假设我们有一个二维二进制矩阵,我们必须找到所有1都存在的正方形子矩阵的总数。

所以,如果输入像

1
1
1
0
1
1
1
0
1
1
1
0
0
0
0
0
1
0
1
1

那么输出将为17,因为有12(1 x 1)平方,4(2 x 2)平方和1(3 x 3)平方。

为了解决这个问题,我们将遵循以下步骤-

  • res:= 0

  • 对于范围在0到矩阵行数的i,执行

    • 如果i等于0或j等于0,则

    • 否则,当matrix [i,j]与1相同时,

    • res:= res +矩阵[i,j]

    • 矩阵[i,j] =(矩阵[i,j-1],矩阵[i-1,j]和矩阵[i-1,j-1])的最小值+ 1

    • res:= res +矩阵[i,j]

    • 对于范围从0到矩阵的列数的j,执行

    • 返回资源

    让我们看下面的实现以更好地理解-

    例 

    class Solution:
       def solve(self, matrix):
          res = 0
          for i in range(len(matrix)):
             for j in range(len(matrix[0])):
                if i == 0 or j == 0:
                   res += matrix[i][j]
                elif matrix[i][j] == 1:
                   matrix[i][j] = min(matrix[i][j - 1], matrix[i - 1][j], matrix[i - 1][j - 1]) + 1
                   res += matrix[i][j]
          return res
    
    ob = Solution()matrix = [
       [1, 1, 1, 0],
       [1, 1, 1, 0],
       [1, 1, 1, 0],
       [0, 0, 0, 0],
       [1, 0, 1, 1]
    ]
    print(ob.solve(matrix))

    输入值

    matrix = [  
    [1, 1, 1, 0],  
    [1, 1, 1, 0],  
    [1, 1, 1, 0],  
    [0, 0, 0, 0],  
    [1, 0, 1, 1]
    ]

    输出结果

    17