780. 到达终点 (Reaching Points)

该博客讨论了一个从起点到终点的转换问题,其中每次转换可以在坐标上进行加法或减法操作。通过逆向思考,从终点出发只存在两种可能的转换路径,从而简化了解决方案。文章适合对算法和数学逻辑感兴趣的读者。
摘要由CSDN通过智能技术生成

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

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

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

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

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

注意:

  • sx, sy, tx, ty 是范围在 [1, 10^9] 的整数。

由于本题按照题目给的思路正向一步一步走下去会存在多种情况,我们可以逆向推导。反推起点,因为这样只存在两种种情况。

  • if : tx > ty then : tx = tx % ty
  • if : ty > tx then : ty = ty % tx

java代码

class Solution {
    public boolean reachingPoints(int sx, int sy, int tx, int ty) {
        while(tx > sx && ty > sy) {
            if (tx > ty) {
                tx = tx % ty;
            } else {
                ty = ty % tx;
            }
        }
        if (tx == sx) {
           return  (ty - sy)   % tx == 0;
        } else if(ty == sy) {
           return (tx  - sx) % ty  == 0;
        } else {
          return false;
        }
        
    }
}

python代码

class Solution:
    def reachingPoints(self, sx, sy, tx, ty):
        """
        :type sx: int
        :type sy: int
        :type tx: int
        :type ty: int
        :rtype: bool
        """
        while tx > sx and ty > sy:
            if tx > ty:
                tx = tx % ty
            else:
                ty = ty % tx
        
        if tx == sx:
             return (ty - sy) % sx == 0
        if ty == sy:
             return (tx - sx) % sy == 0
        return False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值