leetcode_1232 缀点成线

104 阅读1分钟

要求

在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。

请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 true,否则请返回 false。

示例 1:

image.png

输入:coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
输出:true

示例 2:

image.png

输入:coordinates = [[1,1],[2,2],[3,4],[4,5],[5,6],[7,7]]
输出:false

核心代码

class Solution:
    def checkStraightLine(self, coordinates: List[List[int]]) -> bool:
        x0,y0 = coordinates[0][0], coordinates[0][1]
        x1,y1 = coordinates[1][0], coordinates[1][1]

        if x0 == x1:
            for i in coordinates[2:]:
                if i[0] != x1:
                    return False
        else:
            k = 1.0*(y1-y0)/(x1-x0)
            b = y0 - k*x0
            for i in coordinates[2:]:
                if k*i[0]+b != i[1]:
                    return False
        return True

image.png

解题思路:这个是数学题,循环遍历,y = kx + b 我们先计算出来k,b套到下一个点上,看y值是否能符合,符合判断下一个,不符合直接返回False.