直接用斜率会出现以下问题:
1. 斜率不存在,需要特判
2. 斜率为浮点数
最好的方法是把斜率改成乘法:实际上就是先解出直线方程,然后验证所有点是否都满足直线方程,也可以用叉积,来理解,时间复杂度O(N)
class Solution {
public:
bool checkStraightLine(vector<vector<int>>& coordinates) {
int dx0 = coordinates[1][0] - coordinates[0][0];
int dy0 = coordinates[1][1] - coordinates[0][1];
int n = coordinates.size();
for(int i=2;i<n;i++){
int dx1 = coordinates[i][0] - coordinates[0][0];
int dy1 = coordinates[i][1] - coordinates[0][1];
if(dx0*dy1!=dx1*dy0) return false;
}
return true;
}
};