g0701_0800.s0780_reaching_points.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0701_0800.s0780_reaching_points;
// #Hard #Math #2022_03_26_Time_0_ms_(100.00%)_Space_41.3_MB_(32.70%)
/**
* 780 - Reaching Points\.
*
* 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
**/
public class Solution {
public boolean reachingPoints(int sx, int sy, int tx, int ty) {
while (tx >= sx && ty >= sy) {
if (tx > ty) {
if (ty == sy) {
// ty==sy
return (tx - sx) % sy == 0;
} else {
// ty > sy
tx %= ty;
}
} else if (sx == tx) {
// ty >= tx
return (ty - sy) % sx == 0;
} else {
// (tx > sx)
ty %= tx;
}
}
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy