题目:
给你一个二维 boolean 矩阵 grid
。
请你返回使用 grid
中的 3 个元素可以构建的 直角三角形 数目,且满足 3 个元素值 都 为 1 。
注意:
- 如果
grid
中 3 个元素满足:一个元素与另一个元素在 同一行,同时与第三个元素在 同一列 ,那么这 3 个元素称为一个 直角三角形 。这 3 个元素互相之间不需要相邻。
思路:
这道题可以选择用枚举的方式来做,先固定行的一点,计算该点所在列元素值为1的个数(col),再固定列的一点。计算该点所在行元素值为1的个数(row),因为需要将本身值减掉,所以实际列元素值为1的个数col - 1 ,实际行元素值1的个数 row - 1。根据乘法原理,将(col-1) *(row-1)为该题的解
代码:
class Solution:
def numberOfRightTriangles(self, grid: List[List[int]]) -> int:
n, m = len(grid), len(grid[0])
col = [0] * m
res = 0
for j in range(m):
for i in range(n):
col[j] += grid[i][j]
for i in range(n):
row = sum(grid[i])
for j in range(n):
if grid[i][j] == 1:
res += (row-1) * (col[j] - 1)
return res
心得:
注意索引过界!!!