题目分析
题目要求判断给定的三个点是否能构成一个“回旋镖”。回旋镖的定义是:三个点中任意两个点之间的距离都不相等。换句话说,这三个点不能共线。
解题思路
-
计算斜率:
- 如果三个点共线,那么任意两点之间的斜率应该是相同的。
- 斜率的计算公式为:slope=𝑦2−𝑦1𝑥2−𝑥1slope=x2−x1y2−y1
- 需要注意的是,当 𝑥2=𝑥1x2=x1 时,斜率是无穷大,需要特殊处理。
-
比较斜率:
- 计算点 A 到点 B 的斜率(slope_AB)和点 A 到点 C 的斜率(slope_AC)。
- 如果这两个斜率不相等,说明这三个点不共线,即它们可以构成一个回旋镖。
代码详解
Python
深色版本
def solution(points: list) -> bool:
x1, y1 = points[0]
x2, y2 = points[1]
x3, y3 = points[2]
# 计算斜率 AB
slope_ab = (y2 - y1) / (x2 - x1) if x2 != x1 else float('inf')
# 计算斜率 AC
slope_ac = (y3 - y1) / (x3 - x1) if x3 != x1 else float('inf')
# 比较斜率 AB 和 AC 是否相等
return slope_ab != slope_ac
代码解释
-
提取点的坐标:
Python 深色版本 x1, y1 = points[0] x2, y2 = points[1] x3, y3 = points[2]这里我们将三个点的坐标分别赋值给
x1, y1,x2, y2,x3, y3。 -
计算斜率 AB:
Python 深色版本 slope_ab = (y2 - y1) / (x2 - x1) if x2 != x1 else float('inf')如果
x2 != x1,则计算斜率;否则,斜率为无穷大(float('inf'))。 -
计算斜率 AC:
Python 深色版本 slope_ac = (y3 - y1) / (x3 - x1) if x3 != x1 else float('inf')同理,如果
x3 != x1,则计算斜率;否则,斜率为无穷大(float('inf'))。 -
比较斜率:
Python 深色版本 return slope_ab != slope_ac如果
slope_ab和slope_ac不相等,说明这三个点不共线,返回True;否则,返回False。
测试用例
Python
深色版本
if __name__ == '__main__':
print(solution(points=[[1, 1], [2, 3], [3, 2]]) == True) # True
print(solution(points=[[1, 1], [2, 2], [3, 3]]) == False) # False
print(solution(points=[[0, 0], [1, 1], [1, 0]]) == True) # True
- 第一个测试用例
[[1, 1], [2, 3], [3, 2]]中,点 (1, 1), (2, 3), (3, 2) 不共线,返回True。 - 第二个测试用例
[[1, 1], [2, 2], [3, 3]]中,点 (1, 1), (2, 2), (3, 3) 共线,返回False。 - 第三个测试用例
[[0, 0], [1, 1], [1, 0]]中,点 (0, 0), (1, 1), (1, 0) 不共线,返回True。