351. 判断回旋镖的存在 | 豆包MarsCode AI刷题

106 阅读2分钟

题目分析

题目要求判断给定的三个点是否能构成一个“回旋镖”。回旋镖的定义是:三个点中任意两个点之间的距离都不相等。换句话说,这三个点不能共线。

解题思路

  1. 计算斜率

    • 如果三个点共线,那么任意两点之间的斜率应该是相同的。
    • 斜率的计算公式为:slope=𝑦2−𝑦1𝑥2−𝑥1slope=x2​−x1​y2​−y1​​
    • 需要注意的是,当 𝑥2=𝑥1x2​=x1​ 时,斜率是无穷大,需要特殊处理。
  2. 比较斜率

    • 计算点 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

代码解释

  1. 提取点的坐标

    Python
    深色版本
    x1, y1 = points[0]
    x2, y2 = points[1]
    x3, y3 = points[2]
    

    这里我们将三个点的坐标分别赋值给 x1, y1, x2, y2, x3, y3

  2. 计算斜率 AB

    Python
    深色版本
    slope_ab = (y2 - y1) / (x2 - x1) if x2 != x1 else float('inf')
    

    如果 x2 != x1,则计算斜率;否则,斜率为无穷大(float('inf'))。

  3. 计算斜率 AC

    Python
    深色版本
    slope_ac = (y3 - y1) / (x3 - x1) if x3 != x1 else float('inf')
    

    同理,如果 x3 != x1,则计算斜率;否则,斜率为无穷大(float('inf'))。

  4. 比较斜率

    Python
    深色版本
    return slope_ab != slope_ac
    

    如果 slope_abslope_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