A move consists of taking a point(x, y)
and transforming it to either(x, x+y)
or(x+y, y)
.
Given a starting point(sx, sy)
and a target point(tx, ty)
, returnTrue
if and only if a sequence of moves exists to transform the point(sx, sy)
to(tx, ty)
. Otherwise, returnFalse
.
Examples:
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)
Input:
sx = 1, sy = 1, tx = 2, ty = 2
Output:
False
Input:
sx = 1, sy = 1, tx = 1, ty = 1
Output:
True
Note:
sx, sy, tx, ty
will all be integers in the range
[1, 10^9]
.四种解法都看
class Solution {
public boolean reachingPoints(int sx, int sy, int tx, int ty) {
while (tx >= sx && ty >= sy){
if (tx > ty){
if (ty > sy){
tx %= ty;
}
else{
return (tx - sx) % ty == 0;
}
}
else{
if (tx > sx){
ty %= tx;
}
else{
return (ty - sy) % tx == 0;
}
}
}
return false;
}
}