原题:
解题:
先固定一个点A,假设有B,C两点到A的距离一样,那么排列方式是ABC,ACB,共2种,如果有B,C,D三个点到A的距离都相等,那么排列方式是ABCD,ABDC,ACBD,ACDB,ADBC,ADCB共6种,其实就是有N个点到点A的距离相等,那么排列组合就是N(N-1),那么就可以依次把所有的点遍历一遍,将其当做固定的点A,然后每次遍历统计结果,最后相加得到最后的结果
AC代码:
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points)
{
int size = points.size();
int count = 0;
int i,j;
int x,y;
for(i = 0;i < size; i++)
{
map <int,int> maptmp;
for(j = 0; j < size; j++)
{
x = points[i].first - points[j].first;
y = points[i].second - points[j].second;
maptmp[x*x+y*y]++;
}
map <int,int>::iterator it;
for(it = maptmp.begin();it != maptmp.end(); it++)
{
count += it->second*(it->second - 1);
}
}
return count;
}
};