当前位置: 代码迷 >> 综合 >> Leetcode 1041 Robot Bounded In Circle
  详细解决方案

Leetcode 1041 Robot Bounded In Circle

热度:86   发布时间:2024-02-19 18:58:25.0

Leetcode 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 degress 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: “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: “GG”
Output: false
Explanation:
The robot moves north indefinitely.

Example 3:
Input: “GL”
Output: true
Explanation:
The robot moves from (0, 0) -> (0, 1) -> (-1, 1) -> (-1, 0) -> (0, 0) -> …

Note:

1 <= instructions.length <= 100
instructions[i] is in {‘G’, ‘L’, ‘R’}

算法

只要最后的位置与初始位置相同,或者位置不同但是方向改变(这样两轮或者四轮以后就会走个往返画个正方形回去)。
考虑用一个[0,4)[0,4)[0,4)范围的变量记录方向,右转加1,左转减1,前进的话根据方向的不同更新x, y的值可以得到答案。

代码

public boolean isRobotBounded(String instructions) {
    int x = 0, y = 0, dir = 0;// dir = 0 up, 1 right, 2 down, 3 leftchar ch;for (int i = 0; i < instructions.length(); i++) {
    ch = instructions.charAt(i);if (ch == 'G') {
    y += dir % 2 * (2 - dir);x += (dir + 1) % 2 * (1 - dir);} else if (ch == 'R') {
    dir = dir == 3 ? 0 : (dir + 1);} else {
    dir = dir == 0 ? 3 : (dir - 1);}}return x == 0 && y == 0 || dir != 0;
}