缀点成线
问题:
在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中coordinates[i] = [x, y]
表示横坐标为 x、纵坐标为 y 的点。
行数 = 2;
请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。
思路:
将所有点平移第一个点的位置大小,那么这些点如果在一条直线上,其他所有点都应该满足 A * x + B * y = 0
不满足返回 false ,全部满足返回 true。
class Solution {
public:
bool checkStraightLine(vector<vector<int>>& coordinates) {
const int n = coordinates.size(); // 列数
auto deltX = coordinates[0][0], deltY = coordinates[0][1];
for(int i = 0; i < n; ++i){
coordinates[i][0] -= deltX;
coordinates[i][1] -= deltY;
}
auto A = coordinates[1][1], B = -coordinates[1][0];
for(int j = 2; j < n; ++j){
if(A * coordinates[j][0] + B * coordinates[j][1] != 0)
return false;
}
return true;
}
};