使用Python编写计算所有全为1的正方形子矩阵的数量的程序
假设我们有m x n的二进制矩阵,我们必须找到有多少个全为1的正方形子矩阵。
所以,如果输入为:
0 | 1 | 1 | 1 |
---|---|---|---|
1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
那么输出将是15,因为有10个边长为1的正方形,4个边长为2的正方形和1个边长为3的正方形。则正方形总数= 10 + 4 + 1 = 15。
为了解决这个问题,我们将采取以下步骤−
- 如果矩阵只有一个1,则
- 返回1
- 行:=矩阵的行数
-
列:=矩阵[0]的列数
-
结果:= 0
-
对于行0到行数-1的行,执行以下操作
- 对于列0到列数-1的列,执行以下操作
- 如果行与0相同或列与0相同,则
-
如果matrix [row,col]等于1,则
- 结果:=结果+1
- 否则当matrix [row,col]等于1时,则:
- square:= 1 +(matrix [row-1,col],matrix [row,col-1]和matrix [row-1,col-1]的最小值)
-
matrix [row,col]:= square
-
结果:=结果+ square
- 如果行与0相同或列与0相同,则
- 对于列0到列数-1的列,执行以下操作
-
返回结果
为了更好地理解,请参见以下实现−
示例
def solve(matrix):
if matrix == [[1]]:
return 1
rows = len(matrix)
cols = len(matrix[0])
result = 0
for row in range(rows):
for col in range(cols):
if (row == 0 or col == 0):
if matrix[row][col] == 1:
result += 1
elif matrix[row][col] == 1:
square = min(matrix[row-1][col], min(matrix[row][col-1], matrix[row-1][col-1])) + 1
matrix[row][col] = square
result += square
return result
matrix= [[0,1,1,1],[1,1,1,1],[0,1,1,1]]
print(solve(matrix))
输入
{{0,1,1,1},{1,1,1,1},{0,1,1,1}}
输出
15