g2501_2600.s2543_check_if_point_is_reachable.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 g2501_2600.s2543_check_if_point_is_reachable;
// #Hard #Math #Number_Theory #2023_05_11_Time_0_ms_(100.00%)_Space_39.3_MB_(70.37%)
/**
* 2543 - Check if Point Is Reachable\.
*
* Hard
*
* There exists an infinitely large grid. You are currently at point `(1, 1)`, and you need to reach the point `(targetX, targetY)` using a finite number of steps.
*
* In one **step** , you can move from point `(x, y)` to any one of the following points:
*
* * `(x, y - x)`
* * `(x - y, y)`
* * `(2 * x, y)`
* * `(x, 2 * y)`
*
* Given two integers `targetX` and `targetY` representing the X-coordinate and Y-coordinate of your final position, return `true` _if you can reach the point from_ `(1, 1)` _using some number of steps, and_ `false` _otherwise_.
*
* **Example 1:**
*
* **Input:** targetX = 6, targetY = 9
*
* **Output:** false
*
* **Explanation:** It is impossible to reach (6,9) from (1,1) using any sequence of moves, so false is returned.
*
* **Example 2:**
*
* **Input:** targetX = 4, targetY = 7
*
* **Output:** true
*
* **Explanation:** You can follow the path (1,1) -> (1,2) -> (1,4) -> (1,8) -> (1,7) -> (2,7) -> (4,7).
*
* **Constraints:**
*
* * 1 <= targetX, targetY <= 109
**/
public class Solution {
public boolean isReachable(int x, int y) {
int g = gcd(x, y);
return (g & (g - 1)) == 0;
}
private int gcd(int x, int y) {
while (x != 0) {
int tmp = x;
x = y % x;
y = tmp;
}
return y;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy