只考慮兩個點,在驗證所有的點,先考慮x1 === x2 和 y1 === y2
然後考慮兩個點的x的值可能為零,然後寫出k,b的計算公式,最後用every判斷一下。
/**
* @param coordinates
* @return
*/var
checkstraightline
=function
(coordinates))}
else
if(y1===y2))}
let b =
((y1*x2-x1*y2)
/(x2-x1)
)let k
if(x1===0)
else
return coordinates.
every
(item =>)}
;
公式求b,真是乙個sb的想法。。。。自己看了都尷尬。可以先用公式求k呀。(學過的數學全忘了)
我們知道,在給定的點集中,以任意一點 p 為基準,如果所有其他點的k是不變的,那麼點集內所有的點在同一條直線上。但是這種做法會涉及到除數為 0 的問題,即垂直於 x 軸的直線需要單獨判斷。而且在計算浮點除法運算時還會涉及到精度問題,雖然在力扣中通過應該是沒問題的,但是如果把測試集稍微設計一下就可能會通過不了。所以我們最好另尋他法。
我們可以把點集中除了 p之外的點 p i都看成以 p為起點、p i為終點的向量,記為 vi,並選擇 v1作為基準。如果其他向量都與 v 1 共線,那麼點集內所有的點共線。
∣α, β∣=0,
即它們拼成的二階矩陣的行列式為 0。
int n = coordinates.
size()
; int x0 = coordinates[0]
[0], y0 = coordinates[0]
[1];
int x = coordinates[1]
[0]- x0;
int y = coordinates[1]
[1]- y0;
for(int i =
2; i < n;
++i)
}return
true
;
這個想法很是不錯,很細緻。 1232 綴點成線
在乙個 xy 座標系中有一些點,我們用陣列 coordinates 來分別記錄它們的座標,其中 coordinates i x,y 表示橫座標為 x 縱座標為 y 的點。請你來判斷,這些點是否在該座標系中屬於同一條直線上,是則返回 true,否則請返回 false。示例 1 輸入 coordinat...
1232 綴點成線
在乙個 xy 座標系中有一些點,我們用陣列 coordinates 來分別記錄它們的座標,其中 coordinates i x,y 表示橫座標為 x 縱座標為 y 的點。請你來判斷,這些點是否在該座標系中屬於同一條直線上,是則返回 true,否則請返回 false。輸入 coordinates 1,...
leetcode 1232 綴點成線
1037.有效的迴旋鏢 1232.綴點成線 在乙個 xy 座標系中有一些點,我們用陣列 coordinates 來分別記錄它們的座標,其中 coordinates i x,y 表示橫座標為 x 縱座標為 y 的點。請你來判斷,這些點是否在該座標系中屬於同一條直線上,是則返回 true,否則請返回 f...