力扣1232.綴點成線
阿新 • • 發佈:2021-02-07
題目描述
在一個 XY 座標系中有一些點,我們用陣列 coordinates 來分別記錄它們的座標,其中 coordinates[i] = [x, y] 表示橫座標為 x、縱座標為 y 的點。
請你來判斷,這些點是否在該座標系中屬於同一條直線上,是則返回 true,否則請返回 false。
示例
示例 1:
輸入:coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
輸出:true
示例 2:
輸入:coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
提示
2 <= coordinates.length <= 1000
coordinates[i].length == 2
-10^4 <= coordinates[i][0], coordinates[i][1] <= 10^4
coordinates 中不含重複的點
解題思路
使用dy/dx計算斜率,驗證其他點是否在直線上,思路簡單
注意細節:斜率為浮點數,b為浮點數,以及驗證時的強制型別轉換
不要忘記斜率不存在的情況
程式碼
bool checkStraightLine(int** coordinates, int coordinatesSize, int * coordinatesColSize){
if(coordinatesSize>=2){
double k=0;
int dy=coordinates[coordinatesSize-1][1]-coordinates[0][1];
int dx=coordinates[coordinatesSize-1][0]-coordinates[0][0];
if(dx!=0){
k=(double)dy/dx;
double b=(double)coordinates[0][1]-k*coordinates[ 0][0];
for(int i=1;i<coordinatesSize-1;i++){
if(k*(double)coordinates[i][0]+b!=(double)coordinates[i][1])return false;
}return true;
}
else {
for(int i=1;i<=coordinatesSize-2;i++){
if(coordinates[i][0]!=coordinates[0][0])return false;
}return true;
}
}else return false;
}