1. 程式人生 > 其它 >力扣1232.綴點成線

力扣1232.綴點成線

技術標籤:leetcodeleetcode演算法

題目描述

在一個 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]]

輸出:false

提示

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; }

連結