-
题目描述:给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。
找到所有回旋镖的数量。你可以假设 n 最大为 500,所有点的坐标在闭区间 [-10000, 10000] 中。
-
示例:
输入:
[[0,0],[1,0],[2,0]]
输出:
2
解释:
两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]
解题思路:
1.确定第一个点,然后计算与其他点的距离
2.如果距离相等的次数大于等于2,则使用排列组合解决 perm(次数,2)Python版:
from collections import Counter
from scipy.special import perm
class Solution:
def numberOfBoomerangs(self, points: List[List[int]]) -> int:
count = 0
for point in points:
# distance2 记录对这个点来说的所有的距离
distance2 = []
for neighbor in points:
distance2.append((point[0] - neighbor[0]) ** 2 + (point[1] - neighbor[1]) ** 2)
frequency = Counter(distance2)
for dist,num in frequency.items():
if num >= 2:
count += perm(num,2)
return int(count)
- 链接:https://leetcode-cn.com/problems/number-of-boomerangs/solution/yi-xing-python3-chao-jian-dan-jie-fa-by-qsctech-sa/
Tips: - 两次遍历,找出两个点间距离,由于相等判断无需去根号,公式即为(point[0] - neighbor[0]) ** 2 + (point[1] - neighbor[1]) ** 2
-
perm()函数是python中用来计算排列组合