Leetcode Leetcode 1232.行への装飾(python)

トピック:

XY座標系にはいくつかの点があります。配列座標を使用して、それらの座標を個別に記録します。ここで、coordinates [i] = [x、y]は、横軸をx、縦軸をyとする点を表します。
これらの点が座標系で同じ直線上にあるかどうかを判断してください。はいの場合はtrueを返し、そうでない場合はfalseを返します。

Example_1:
ここに画像の説明を挿入

入力:座標= [[1,2]、[2,3]、[3,4]、[4,5]、[5,6]、[6,7]]
出力:true

Example_2:
ここに画像の説明を挿入

入力:座標= [[1,1]、[2,2]、[3,4]、[4,5]、[5,6]、[7,7]]
出力:false

解決:

これは2つのケースに分けられ
ます。1。勾配が0の場合、横座標のみが同じである必要があり
ます。2。勾配が0でない場合、勾配は等しくなります。

Code_1:

class Solution:
    def checkStraightLine(self, coordinates: List[List[int]]) -> bool:
        if coordinates[1][0] - coordinates[0][0] == 0:  # 斜率不存在时判断横坐标是否均相同
            j = coordinates[0][0]
            for i in range(1, len(coordinates)):
                if coordinates[i][0] == j:
                    pass
                else:
                    return False

        else:
            a = (coordinates[1][1] - coordinates[0][1]) / (coordinates[1][0] - coordinates[0][0])
            for i in range(2, len(coordinates)):
                if coordinates[i][0] - coordinates[i - 1][0] == 0:  # 只要横坐标之差出现0就错误,避免除以0的情况
                    return False
                elif (coordinates[i][1] - coordinates[i - 1][1]) / (coordinates[i][0] - coordinates[i - 1][0]) == a:
                    pass
                else:
                    return False
        
        return True

Code_2:
演算のために乗算に変換することもできます

class Solution:
    def checkStraightLine(self, coordinates: List[List[int]]) -> bool:
        if coordinates is None or len(coordinates) <= 2:
            return True

        y = coordinates[1][1] - coordinates[0][1]
        x = coordinates[1][0] - coordinates[0][0]

        for i in range(2, len(coordinates)):
            y1 = coordinates[i][1] - coordinates[0][1]
            x1 = coordinates[i][0] - coordinates[0][0]
            if y * x1 != y1 * x:
                return False
        
        return True

結果:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_50791900/article/details/112727708