题目
给定一个数组 coordinates ,其中 coordinates[i] = [x, y] , [x, y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断,这些点是否在该坐标系中属于同一条直线上。
示例 1:
image.png
输入:coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
输出:true
示例 2:
输入:coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
输出:false
提示:
2 <= coordinates.length <= 1000
coordinates[i].length == 2
-10^4 <= coordinates[i][0], coordinates[i][1] <= 10^4
coordinates 中不含重复的点
java代码:
class Solution {
public boolean checkStraightLine(int[][] coordinates) {
/*
* 一般式:Ax+By+C=0(AB≠0)
* 两点式:(y-y1)/(x-x1)=(y-y2)/(x-x2) (直线过定点(x1,y1),(x2,y2))
*/
// 这里取定点为coordinates[0],和coordinates[n-1]
// 为避免除法运算,这里用“两内项的积等于两外项的积”计算
int n = coordinates.length;
for(int i = 1; i < n-1; ++i)
{
if(
(coordinates[i][0] - coordinates[0][0])* /* (x-x1)*(y-y2) */
(coordinates[i][1] - coordinates[n-1][1])
!=
(coordinates[i][1] - coordinates[0][1])* /* (y-y1)*(x-x2) */
(coordinates[i][0] - coordinates[n-1][0])
) return false;
}
return true;
}
}
网友评论