枚举+哈希表
//447 回旋镖的数量
排列数问题,三个点构成回旋镖,全局来说,只需要得到相同距离的有几个,即可进行处理了。
public int numberOfBoomerangs(int[][] points) { int ans = 0; for (int[] p : points) { Mapcnt = new HashMap(); for (int[] q : points) { int dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1]); //处理距离 其实不用在意点的位置 只需要得出【距离】这个信息即可 cnt.put(dis, cnt.getOrDefault(dis, 0) + 1); //封装进map中 } for (Map.Entryentry : cnt.entrySet()) { int m = entry.getValue(); ans += m * (m - 1);//排列数 Am2 从m个数中取出两个数 } } return ans; }