浅谈 缀点成线 问题

缀点成线

问题:
在一个 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;
    }
};

你可能感兴趣的:(数据结构与算法(刷题篇),leetcode,c++)