【LeetCode】1232. 綴點成線
阿新 • • 發佈:2021-01-18
技術標籤:LeetCode
題目連結:https://leetcode-cn.com/problems/check-if-it-is-a-straight-line/
難度:簡單
題目描述
在一個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中不含重複的點
題解
常規求法是找三個點A、B、C,判斷AB的斜率和AC的斜率是否一致,但求斜率時用到除法,會出現分母為零的情況,並且除法的結果double型別比較時會由於精度問題出現錯誤。
因此將其改為乘法比較,把第0個元素作為點A,第1個元素作為點B:
化為乘法:
判斷上述條件是否成立即可。
程式碼如下
// java class Solution { public boolean checkStraightLine(int[][] coordinates) { int x1_x0 = coordinates[1][0] - coordinates[0][0]; int y1_y0 = coordinates[1][1] - coordinates[0][1]; int len = coordinates.length; for (int i = 2; i < len; i++){ int xi_x0 = coordinates[i][0] - coordinates[0][0]; int yi_y0 = coordinates[i][1] - coordinates[0][1]; if (x1_x0 * yi_y0 != xi_x0 * y1_y0) return false; } return true; } }