All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g2501_2600.s2543_check_if_point_is_reachable.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
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