LeetCodeDiary

A Diary for solving LeetCode problems

View on GitHub

447. 回旋镖的数量

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

返回平面上所有回旋镖的数量。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

数组 哈希表 中等

代码

class Solution:
    def numberOfBoomerangs(self, points: List[List[int]]) -> int:
        ans = 0
        for [xi, yi] in points:
            d = Counter()
            for [xj, yj] in points:
                if xi == xj and yi == yj: continue
                dist = (xi-xj)**2 + (yi-yj)**2
                d[dist] += 1
            for _, v in d.items():
                if v >= 2:
                    ans += v * (v-1)
        return ans