Hard
Given four integers sx
, sy
, tx
, and ty
, return true
if it is possible to convert the point (sx, sy)
to the point (tx, ty)
through some operations__, or false
otherwise.
The allowed operation on some point (x, y)
is to convert it to either (x, x + y)
or (x + y, y)
.
Example 1:
Input: sx = 1, sy = 1, tx = 3, ty = 5
Output: true
Explanation: One series of moves that transforms the starting point to the target is:
(1, 1) -> (1, 2)
(1, 2) -> (3, 2)
(3, 2) -> (3, 5)
Example 2:
Input: sx = 1, sy = 1, tx = 2, ty = 2
Output: false
Example 3:
Input: sx = 1, sy = 1, tx = 1, ty = 1
Output: true
Constraints:
1 <= sx, sy, tx, ty <= 109
@Suppress("NAME_SHADOWING")
class Solution {
fun reachingPoints(sx: Int, sy: Int, tx: Int, ty: Int): Boolean {
var tx = tx
var ty = ty
while (tx >= sx && ty >= sy) {
if (tx > ty) {
tx %= if (ty == sy) {
// ty==sy
return (tx - sx) % sy == 0
} else {
// ty > sy
ty
}
} else if (sx == tx) {
// ty >= tx
return (ty - sy) % sx == 0
} else {
// (tx > sx)
ty %= tx
}
}
return false
}
}