皮卡丘python写leetcode_Day7

·1232 缀点成线

给定一个数组 coordinates ,其中 coordinates[i] = [x, y] , [x, y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断,这些点是否在该坐标系中属于同一条直线上。

 

示例 1:



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



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

·解题思路:

1.两个点则返回true

2.由前两个点构成直线,再判断是否再直线上。两种情况:

一种是,斜率不存在——那么就需要所有的横坐标都相同

斜率存在——求k,b,再判断是否在直线上。在求k的时候,涉及除法,要把除法中的除数或者被除数转换为浮点数,否则会遗失小数部分导致报错

·代码

class Solution(object):
    def checkStraightLine(self, coordinates):

        size = len(coordinates)
        if size == 2:
            return True
        if coordinates[0][0] == coordinates[1][0]:
            for j in range(2,size):
                if coordinates[j][0] != coordinates[0][0]:
                    return False
        else:
            k = float((coordinates[0][1] - coordinates[1][1])) / (coordinates[0][0] - coordinates[1][0])
            b = coordinates[0][1] - k * coordinates[0][0]
            for j in range(2, size):
                if coordinates[j][1] != k * coordinates[j][0] + b:
                    return False
        return True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值