题目描述#

给你一个二维 boolean 矩阵 grid 。

如果 grid 的 3 个元素的集合中,一个元素与另一个元素在 同一行,并且与第三个元素在 同一列,则该集合是一个 直角三角形。3 个元素 不必 彼此相邻。

请你返回使用 grid 中的 3 个元素可以构建的 直角三角形 数目,且满足 3 个元素值 都 为 1 。

思路#

找到每行的1的个数,每列的1的个数,然后对于每个grid[i][j] == 1的点,计算以该点为直角顶点的直角三角形个数,即(rowCount[i] - 1) * (colCount[j] - 1),累加到结果中。

乘法原理

代码#

func numberOfRightTriangles(grid [][]int) int64 {
	m := len(grid)
	n := len(grid[0])
	arrM := make([]int, n)
	for i := 0; i < n; i++ {
		for j := 0; j < m; j++ {
			arrM[i] += grid[j][i]
		}
	}
	var ans int64

	for _, row := range grid {
		rowSum := -1
		for _, x := range row {
			rowSum += x
		}
		for j, x := range row {
			if x == 1 {
				ans += int64(arrM[j]-1) * int64(rowSum)
			}
		}
	}
	return ans

}
本站总访问量  ·  访客数
你的IP 获取中…