使用Python统计全为1的子矩阵个数的程序


假设我们有一个m x n的二进制矩阵,我们需要找到有多少个子矩阵全为1。

例如,如果输入是:

101
011
011

那么输出将是13,因为有6个(1x1)矩阵,3个(2x1)矩阵,2个(1x2)矩阵,1个(3x1)矩阵和1个(4x4)矩阵。

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

  • m := 矩阵的行数

  • n := 矩阵的列数

  • dp := 一个大小相同的m x n的零矩阵

  • 对于 i 从 0 到 m - 1:

    • 对于 j 从 0 到 n - 1:

      • 如果 i 等于 0 且 matrix[i, j] 为1,则:

        • dp[i, j] := 1

      • 否则,如果 matrix[i][j] 不为零,则:

        • dp[i, j] := dp[i-1, j] + 1

  • total := 0

  • 对于 i 从 0 到 m - 1:

    • 对于 j 从 0 到 n - 1:

      • 对于 k 从 j+1 到 n:

        • total := total + dp[i,j] 到 dp[i,k] 的最小值

  • 返回 total

让我们来看下面的实现来更好地理解:

示例

在线演示

def solve(matrix):
   m = len(matrix)
   n = len(matrix[0])
   dp = [[0] * n for _ in range(m)]
   for i in range(m):
      for j in range(n):
         if i == 0 and matrix[i][j]:
            dp[i][j] = 1
         elif matrix[i][j]:
            dp[i][j] = dp[i-1][j] + 1
   total = 0
   for i in range(m):
      for j in range(n):
         for k in range(j+1, n+1):
            total += min(dp[i][j:k])
   return total
matrix = [[1,0,1],[0,1,1],[0,1,1]]
print(solve(matrix))

输入

[4,6,7,8], 11

输出

13

更新于:2021年5月29日

524 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告