题目来源:
leetcode题目,网址:1037. 有效的回旋镖 - 力扣(LeetCode)
解题思路:
首先判断是否有相同的点。然后判断两点所组成直线斜率是否为无穷。最后判断由不同三点组成的两条直线斜率是否相同。
解题代码:
class Solution {
public boolean isBoomerang(int[][] points) {
if(isSame(points[0],points[1]) || isSame(points[0],points[2]) || isSame(points[1],points[2])){
return false;
}
else if(points[0][0]==points[1][0] && points[1][0]==points[2][0]){
return false;
}else if(points[0][0]==points[1][0] || points[1][0]==points[2][0]){
return true;
}
double k1=(points[1][1]-points[0][1]+0.0)/(points[1][0]-points[0][0]);
double k2=(points[2][1]-points[0][1]+0.0)/(points[2][0]-points[0][0]);
return k1==k2?false:true;
}
public boolean isSame(int[] pointA,int[] pointB){
return pointA[0]==pointB[0] && pointA[1]==pointB[1];
}
}
总结:
官方题解用的是向量叉乘,两向量叉乘结果不为 0 等价于 三点各不相同且不在一条直线上。