leetcode780. 到达终点

96 篇文章 1 订阅
81 篇文章 1 订阅

https://leetcode-cn.com/problems/reaching-points/comments/
从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y)。
给定一个起点 (sx, sy) 和一个终点 (tx, ty),如果通过一系列的转换可以从起点到达终点,则返回 True ,否则返回 False。

这道题一开始觉得是递归,但是立马被自己否决了,如果起始是(1,1),岂不要递归死
后来想了一个想法,我倒过来考虑啊,也没考虑太多,把想到的写了,然后就通过了!
不是最简洁的,但是自己想出来的

代码:

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

leetcode的一些已经写的觉得有意思的其他题目
https://blog.csdn.net/qq_33321609/article/category/9012437
如果有我没有写博客的其他题目需要讨论,欢迎评论,一起探讨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值