这个题解的思路是首先检查三个点是否有任意两个点重合,如果有,则它们不构成回旋镖。接着,使用斜率公式判断这三个点是否共线,如果共线,它们也不构成回旋镖。只有当三个点各不相同且不共线时,它们才构成一个回旋镖。
时间复杂度: O(1)
空间复杂度: O(1)
from typing import List
class Solution:
def isBoomerang(self, points: List[List[int]]) -> bool:
# 检查两个斜率是否相等来判断三个点是否共线
def isCollinear(p1, p2, p3):
# 斜率公式:(y2 - y1) / (x2 - x1)
slope1 = (p2[1] - p1[1]) / (p2[0] - p1[0]) if p2[0] != p1[0] else float('inf')
slope2 = (p3[1] - p1[1]) / (p3[0] - p1[0]) if p3[0] != p1[0] else float('inf')
return slope1 == slope2
p1, p2, p3 = points
# 如果三个点中有任意两个点重合,它们不构成回旋镖
if p1 == p2 or p1 == p3 or p2 == p3:
return False
# 如果三个点共线,它们也不构成回旋镖
return not isCollinear(p1, p2, p3)