题目
机器人从(0,0)出发,初始化向北
三种指令 G当前方向+1步,L左转90度,R右转90度
问指令结束后是否成圆圈(只有可能回原点时才成圈)
返回true/false
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) -> ...
思路
分类讨论
1、转了一圈回来
2、原地打转没前进
找规律,【原,右,x,左】
第i次right命令=(i+1)%4
第i次left命令=(i+3)%4
代码
细节踩坑,注意
if..if..else
if..else if..else
的区别,测试案例"GLRLLGLL"
注意只转圈未前进的情况(i>0)
测试案例RL
class Solution { public boolean isRobotBounded(String instructions) { int x=0,y=0,help[][]={{0,1},{1,0},{0,-1},{-1,0}};//原、右、x、左 int i=0; for(int j=0;j<instructions.length();++j){ if(instructions.charAt(j)=='L'){ i=(i+3)%4; } else if(instructions.charAt(j)=='R'){ i=(i+1)%4; } else{ x+=help[i][0]; y+=help[i][1]; } } return x==0&&y==0||i>0; } }