g1001_1100.s1041_robot_bounded_in_circle.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 g1001_1100.s1041_robot_bounded_in_circle;
// #Medium #String #Math #Simulation #2022_02_27_Time_0_ms_(100.00%)_Space_39.9_MB_(14.49%)
/**
* 1041 - Robot Bounded In Circle\.
*
* Medium
*
* On an infinite plane, a robot initially stands at `(0, 0)` and faces north. Note that:
*
* * The **north direction** is the positive direction of the y-axis.
* * The **south direction** is the negative direction of the y-axis.
* * The **east direction** is the positive direction of the x-axis.
* * The **west direction** is the negative direction of the x-axis.
*
* The robot can receive one of three instructions:
*
* * `"G"`: go straight 1 unit.
* * `"L"`: turn 90 degrees to the left (i.e., anti-clockwise direction).
* * `"R"`: turn 90 degrees to the right (i.e., clockwise direction).
*
* The robot performs the `instructions` given in order, and repeats them forever.
*
* Return `true` if and only if there exists a circle in the plane such that the robot never leaves the circle.
*
* **Example 1:**
*
* **Input:** instructions = "GGLLGG"
*
* **Output:** true
*
* **Explanation:** The robot is initially at (0, 0) facing the north direction.
*
* "G": move one step. Position: (0, 1). Direction: North.
*
* "G": move one step. Position: (0, 2). Direction: North.
*
* "L": turn 90 degrees anti-clockwise. Position: (0, 2). Direction: West.
*
* "L": turn 90 degrees anti-clockwise. Position: (0, 2). Direction: South.
*
* "G": move one step. Position: (0, 1). Direction: South.
*
* "G": move one step. Position: (0, 0). Direction: South.
*
* Repeating the instructions, the robot goes into the cycle: (0, 0) --> (0, 1) --> (0, 2) --> (0, 1) --> (0, 0).
*
* Based on that, we return true.
*
* **Example 2:**
*
* **Input:** instructions = "GG"
*
* **Output:** false
*
* **Explanation:** The robot is initially at (0, 0) facing the north direction.
*
* "G": move one step. Position: (0, 1). Direction: North.
*
* "G": move one step. Position: (0, 2). Direction: North.
*
* Repeating the instructions, keeps advancing in the north direction and does not go into cycles.
*
* Based on that, we return false.
*
* **Example 3:**
*
* **Input:** instructions = "GL"
*
* **Output:** true
*
* **Explanation:** The robot is initially at (0, 0) facing the north direction.
*
* "G": move one step. Position: (0, 1). Direction: North.
*
* "L": turn 90 degrees anti-clockwise. Position: (0, 1). Direction: West.
*
* "G": move one step. Position: (-1, 1). Direction: West.
*
* "L": turn 90 degrees anti-clockwise. Position: (-1, 1). Direction: South.
*
* "G": move one step. Position: (-1, 0). Direction: South.
*
* "L": turn 90 degrees anti-clockwise. Position: (-1, 0). Direction: East.
*
* "G": move one step. Position: (0, 0). Direction: East.
*
* "L": turn 90 degrees anti-clockwise. Position: (0, 0). Direction: North.
*
* Repeating the instructions, the robot goes into the cycle: (0, 0) --> (0, 1) --> (-1, 1) --> (-1, 0) --> (0, 0).
*
* Based on that, we return true.
*
* **Constraints:**
*
* * `1 <= instructions.length <= 100`
* * `instructions[i]` is `'G'`, `'L'` or, `'R'`.
**/
public class Solution {
public boolean isRobotBounded(String instructions) {
int[][] dir = {{0, 1}, {-1, 0}, {0, -1}, {1, 0}};
int i = 0;
int x = 0;
int y = 0;
for (int s = 0; s < instructions.length(); s++) {
if (instructions.charAt(s) == 'L') {
i = (i + 1) % 4;
} else if (instructions.charAt(s) == 'R') {
i = (i + 3) % 4;
} else {
x = x + dir[i][0];
y = y + dir[i][1];
}
}
return x == 0 && y == 0 || i != 0;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy