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
}