a_lc_到达终点(数学优化)

给定一个起点 (sx, sy) 和一个终点 (tx, ty),如果通过一系列的转换可以从起点到达终点,则返回 True ,否则返回 False。
从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y)。(x,y∈[1, 10^9] )

思路:朴素做法是,当 tx>ty 时,让 tx-=ty,会超时。我们可以用除法来快速得到 tx 需要减的 ty 的个数,即 (tx-sx)/ty

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}
func reachingPoints(sx int, sy int, tx int, ty int) bool {
    for tx > 0 && ty > 0 {
        if tx == sx && ty == sy {
            return true
        }
        if tx > ty {
            tx -= max((tx-sx) / ty, 1) * ty
        } else {
            ty -= max((ty-sy) / tx, 1) * tx
        }
    }
    return false
}
posted @ 2021-05-07 19:28  童年の波鞋  阅读(52)  评论(0编辑  收藏  举报