直接用斜率會出現以下問題:
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;
}
};