1041. Robot Bounded in Circle¶
On an infinite plane, a robot initially stands at (0, 0)
and faces north. The robot can receive one of three instructions:
"G"
: go straight 1 unit;"L"
: turn 90 degrees to the left;"R"
: turn 90 degrees to the right.
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 moves from (0,0) to (0,2), turns 180 degrees, and then returns to (0,0).
When repeating these instructions, the robot remains in the circle of radius 2 centered at the origin.
Example 2:
Input: instructions = "GG"
Output: false
Explanation: The robot moves north indefinitely.
Example 3:
Input: instructions = "GL"
Output: true
Explanation: The robot moves from (0, 0) -> (0, 1) -> (-1, 1) -> (-1, 0) -> (0, 0) -> ...
Constraints:
1 <= instructions.length <= 100
instructions[i]
is'G'
,'L'
or,'R'
.
Analysis¶
- if after mimicing the instructions ends up with x = 0, y = 0, that means it's already a circle, so we return true.
- if after mimicing we ends up with a direction other than going up (if it's up, then that is the only direcion and we cannot go back), we can still make it a circle
Code¶
class Solution {
public:
bool isRobotBounded(string instructions) {
int sx = 0, sy = 0;
int dir = 0; // 0: up, 1: left, 2: down, 3: right
for (char c : instructions) {
if (c == 'G') {
if (dir == 0) sx ++;
else if (dir == 1) sy --;
else if (dir == 3) sy ++;
else sx --;
} else if (c == 'L') dir = (dir + 1) % 4;
else dir = (dir + 3) % 4;
}
return sx == 0 && sy == 0 || dir > 0;
}
};
Last update:
March 31, 2022