此題要算出給予的所有點是否會在同一條線上。
將每一個點與第一個點做斜率,看看是否每個斜率做出來皆相同即可得解。
P.S. 注意垂直時的斜率要另外找方法表示。
Kotlin(176ms)
/*******************************************************
* LeetCode 1232. Check If It Is a Straight Line *
* Author: Maplewing [at] knightzone.studio *
* Version: 2020/05/08 *
*******************************************************/
class Solution {
fun getSlope(a: IntArray, b: IntArray): Double? {
val deltaX = b[0] - a[0]
if (deltaX == 0) return null
val deltaY = b[1] - a[1]
return deltaY.toDouble() / deltaX.toDouble()
}
fun equalApproximatly(a: Double?, b: Double?): Boolean {
if (a == null && b == null) return true
if (a == null) return false
if (b == null) return false
val errorValue = 1e-9
return a < b + errorValue && a > b - errorValue
}
fun checkStraightLine(coordinates: Array<IntArray>): Boolean {
if (coordinates.size < 2) return false
if (coordinates.size == 2) return true
val firstSlope = getSlope(coordinates[0], coordinates[1])
for (i in 2 until coordinates.size) {
val currentSlope = getSlope(coordinates[0], coordinates[i])
if (!equalApproximatly(firstSlope, currentSlope)) {
return false
}
}
return true
}
}