利用反向推理来解决“到达终点”问题

七、到达终点

7.1、题设要求

​​  给定四个整数 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reaching-points

7.2、解题思路

​​  此题使用反向推理操作,先将(tx,ty)进行反向操作,直到无法进行反向操作(最终将会推至(sx,sy)的下一个状态),就可以进行下一步操作,将上述结论推出的状态与(sx,sy)进行计算与判断,得出boolean值。

请添加图片描述

7.3、算法

class Solution {
    public boolean reachingPoints(int sx, int sy, int tx, int ty) {
        //将(tx,ty)进行反向操作,直到无法进行反向操作,就可以进行下一步
        //最终将会推至(sx,sy)的下一个状态
        while(tx > sx && ty > sy && tx != ty){
            if(tx > ty)
                //上一个状态为(tx - ty,ty)
                tx %= ty;
            else
                //上一个状态为(tx,ty - tx)
                ty %= tx;
        }
        //将上述结论推出的状态与(sx,sy)进行计算与判断,得出boolean值
        if(tx == sx && ty == sy){
            //两组数均相对应的相等,故两数组相等
            return true;
        }else if(tx == sx){
            return ty > sy && (ty - sy) % tx == 0;
        }else if(ty == sy){
            return tx > sx && (tx - sx) % ty == 0;
        }else{
            return false;
        }
    }
}

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 45
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&小小白&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值