leetcode 447. 回旋镖的数量

题目描述

给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。
找到所有回旋镖的数量。你可以假设 n 最大为 500,所有点的坐标在闭区间 [-10000, 10000] 中。

示例:
输入:
[[0,0],[1,0],[2,0]]
输出:
2
解释:
两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]

题解

遍历每个点与其它点的距离,具有相同距离的点数如果为n的话,则有n * (n-1)种可能

示例代码(go)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func numberOfBoomerangs(points [][]int) int {
res := 0
for i := 0; i < len(points); i++ {
hashMap := make(map[int]int)
for j := 0; j < len(points); j++ {
if i != j {
x := points[i][0] - points[j][0]
y := points[i][1] - points[j][1]
distance := x * x + y * y
hashMap[distance]++
}
}
for _, n := range hashMap {
res += n * (n-1)
}
}
return res
}