#LeetCode:1232. Check If It Is a Straight Line

灆洢 2020-05-08 20:22:44

此題要算出給予的所有點是否會在同一條線上。

將每一個點與第一個點做斜率,看看是否每個斜率做出來皆相同即可得解。

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

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料