本文共 811 字,大约阅读时间需要 2 分钟。
问题:
在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中coordinates[i] = [x, y]
表示横坐标为 x、纵坐标为 y 的点。 行数 = 2;
请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。
思路:
将所有点平移第一个点的位置大小,那么这些点如果在一条直线上,其他所有点都应该满足 A * x + B * y = 0 不满足返回 false ,全部满足返回 true。
class Solution { public: bool checkStraightLine(vector>& 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; }};
转载地址:http://qypv.baihongyu.com/