LeetCode刷题日记2022-4-9/780. 到达终点-倒序操作

780. 到达终点-倒序操作

题目描述

给定四个整数 sx , sy ,tx 和 ty,如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty),则返回 true,否则返回 false。

从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y)。

示例 1:

输入: sx = 1, sy = 1, tx = 3, ty = 5
输出: true
解释:
可以通过以下一系列转换从起点转换到终点:
(1, 1) -> (1, 2)
(1, 2) -> (3, 2)
(3, 2) -> (3, 5)

示例 2:

输入: sx = 1, sy = 1, tx = 2, ty = 2 
输出: false

示例 3:

输入: sx = 1, sy = 1, tx = 1, ty = 1 
输出: true

提示:

  • 1 <= sx, sy, tx, ty <= 109

题解思路

正序模拟操作的话,情况会非常多导致超时,因此我们倒序进行操作来进行模拟

  • 当ty跟tx都比sy跟sx大的时候
    • 判断ty跟tx的大小,因为大的一个总是由小的加过来的
  • 当tx=sx ty=sy的时候 直接返回True
    • 当tx == sx sy<ty的时候 判断 (ty-sy)%tx==0 也是就ty跟sy的差值是否是tx的倍数
    • 同理 当ty == sy sx>tx的时候 判断 (tx-sx)%ty==0 也就是tx跟sx的差值是否是ty的倍数

题解代码

class Solution:
    def reachingPoints(self, sx: int, sy: int, tx: int, ty: int) -> bool:
        while ty>sy and tx>sx:
            if ty>tx:
                ty%=tx
            else:
                tx%=ty
        
        if ty==sy and tx==sx:
            return True

        elif ty==sy and tx>sx:
            return (tx-sx)%ty==0 
        elif tx==sx and ty>sy:
            return (ty-sy)%tx==0
        else:
            return False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值