leetcode1232一点小问题

解法

  1. a = x 2 − x 1 y 2 − y 1 , b = y 1 − a x 1 a=\frac{x_{2}-x_{1}}{y_{2}-y_{1}} ,b=y_{1}-ax_{1} a=y2y1x2x1b=y1ax1
  2. d = y n − y n − 1 x n − x n − 1 d=\frac{y_{n}-y_{n-1}}{x_{n}-x_{n-1}} d=xnxn1ynyn1
  3. ( y n − y n − 1 ) ∗ x n − x n − 1 = ( y n − 1 − y n − 2 ) ∗ x n − 1 − x n − 2 (y_{n}-y_{n-1})*x_{n}-x_{n-1}=(y_{n-1}-y_{n-2})*x_{n-1}-x_{n-2} (ynyn1)xnxn1=(yn1yn2)xn1xn2

问题

  1. python浮点数无法转换,斜率为0.5
    在这里插入图片描述

  2. return即结束

  3. 时间和空间复杂度太大

  4. 没有斜率(x=0)

解决办法

  1. python3可以使用强制转换达到结果相等,但python未找到合适的解决办法,只能使用解法三
  2. 设置条件只在结果为False时return
  3. 减少循环,尽量设置在同一个for中,如斜率为0的情况设置flag,根据条件进入不同的检验代码中或者选择解法三
        x1,y1=coordinates[0]
        x2,y2=coordinates[1]
        flag=False
        if x2-x1!=0:
            flag=True
            a=(y2-y1)/(x2-x1)
            b=y1-a*x1
        i=len(coordinates)-1
        while i>1:
            if flag and coordinates[i][1]!=a*coordinates[i][0]+b:return False
            elif (not flag) and coordinates[i][0]!=x1:return False
            i-=1
        return True
  1. 判断前两个x是否相等,如果相等,后续也要相等
  2. 注:y=0可以使用斜率式解决,不用单另判断。for取不到最后一个,但是while要注意

解法三

(此为搬运,仅为研究学习,因为从未想到过这个解法)

x1 = coordinates[1][0] - coordinates[0][0]
        y1 = coordinates[1][1] - coordinates[0][1]
        for i in range(len(coordinates)):
            x2 = coordinates[i][0] - coordinates[0][0]
            y2 = coordinates[i][1] - coordinates[0][1]
            if x1 * y2 != x2 * y1:
                return False
        return True

如有侵犯,私信必删

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值