题目
给定一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点,如果这些点构成一个 回旋镖 则返回 true 。
回旋镖 定义为一组三个点,这些点 各不相同 且 不在一条直线上 。
示例 1:
输入:points = [[1,1],[2,3],[3,2]]
输出:true
示例 2:
输入:points = [[1,1],[2,2],[3,3]]
输出:false
提示:
points.length == 3
points[i].length == 2
0 <= xi, yi <= 100
来源:力扣(LeetCode)
解题思路
这个题明显是一个判断三点一线的题目,判断三点一线的方法有许多,比如利用两个点解出一个直线,然后带入第三个点看看是否成立;利用两个点之间斜率来判断。在这里由于可能存在三个点中有多个点重合,便不能直接使用斜率进行判断,需要将斜率公式进行转化来避免除0,或者任意斜率的问题。例如:k1=(y1-y0)/(x1-x0),k2=(y2-y0)/(x2-x0),令k1≠k2,则有(y1-y0)×(x2-x0)≠(x1-x0)×(y2-y0)。
class Solution:
def isBoomerang(self, points: List[List[int]]) -> bool:
return (points[1][1]-points[0][1])*(points[2][0]-points[0][0])!=(points[1][0]-points[0][0])*(points[2][1]-points[0][1])