回旋镖的数量

给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的欧式距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。
返回平面上所有回旋镖的数量。

  • 输入:points = [[0,0],[1,0],[2,0]]
    输出:2
    解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]

  • 输入:points = [[1,1],[2,2],[3,3]]
    输出:2

  • 输入:points = [[1,1]]
    输出:0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var numberOfBoomerangs = function(points) {
let count = 0;
function calcDist(a, b) {
return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2;
}
for (let i = 0; i < points.length; i++) {
const map = {};
for (let j = 0; j < points.length; j++) {
if (points[i] != points[j]) {
let dist = calcDist(points[i], points[j]);
map[dist] = (map[dist] || 0) + 1;
}
}
for (let d in map) {
let num = map[d];
if (num > 1) {
count += num * (num - 1);
}
}
}
return count;
};