📅  最后修改于: 2023-12-03 15:12:04.812000             🧑  作者: Mango
在一个矩阵中,可以找到两个直角三角形,它们的直角都平行于矩阵的边。
一个 $n \times m$ 矩阵,其中 $n$ 表示行数,$m$ 表示列数。矩阵中的元素为非负整数。
返回两个直角三角形的面积。
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
[6, 24]
可以找到两个直角三角形:
1 2
4 5
第一个三角形的两条直角边的长度分别为 1 和 3,面积为 1.5。
5 6
8 9
第二个三角形的两条直角边的长度分别为 3 和 2,面积为 3。
两个三角形的面积分别为 1.5 和 3,所以输出为 [6, 24]。
def find_triangles(matrix):
n, m = len(matrix), len(matrix[0])
area1, area2 = None, None
# 从左上角出发,找第一个直角三角形
for i in range(n):
for j in range(m):
if i+1 < n and j+1 < m:
# 取左上、右上、左下三个点,计算它们是否构成直角三角形
a, b, c = matrix[i][j], matrix[i][j+1], matrix[i+1][j]
if a**2 + b**2 == c**2:
area1 = a*b/2
break
if area1 is not None:
break
# 从右下角出发,找第二个直角三角形
for i in range(n-1, -1, -1):
for j in range(m-1, -1, -1):
if i-1 >= 0 and j-1 >= 0:
# 取右下、左下、右上三个点,计算它们是否构成直角三角形
a, b, c = matrix[i][j], matrix[i-1][j], matrix[i][j-1]
if a**2 + b**2 == c**2:
area2 = a*b/2
break
if area2 is not None:
break
return [area1, area2]