结题思路
- 用哈希表记录每个点到其他点的距离,每个距离相同的点个数为val
- 外层的for循环遍历所有点,作为回旋镖的第一个点,内层循环遍历所有点,计算回旋镖的第一个点和其他点的距离,并记录到哈希表中
- 遍历哈希表,从val个距离相同的点中选2个点,作为回旋镖的后两个点,共有val* (val - 1)种情况
代码
class Solution {
public int numberOfBoomerangs(int[][] points) {
int res=0;
for(int i=0;i<points.length;i++){
//计算第一个点到其他各个点的距离
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int j=0;j<points.length;j++){
int x=points[i][0]-points[j][0];
int y=points[i][1]-points[j][1];
int dx=x*x+y*y;
//当存在这个距离时,把这样的点数+1
map.put(dx,map.getOrDefault(dx,0)+1);
}
for(int val:map.values()){
//存在的可能 val * (val-1)
res+=val*(val-1);
}
}
return res;
}
}