题目描述:
在无限的平面上,机器人最初位于 (0, 0)
处,面朝北方。机器人可以接受下列三条指令之一:
"G"
:直走 1 个单位"L"
:左转 90 度"R"
:右转 90 度
机器人按顺序执行指令 instructions
,并一直重复它们。
只有在平面中存在环使得机器人永远无法离开时,返回 true
。否则,返回 false
。
示例 1:
输入:"GGLLGG"
输出:true
解释:
机器人从 (0,0) 移动到 (0,2),转 180 度,然后回到 (0,0)。
重复这些指令,机器人将保持在以原点为中心,2 为半径的环中进行移动。
示例 2:
输入:"GG"
输出:false
解释:
机器人无限向北移动。
示例 3:
输入:"GL"
输出:true
解释:
机器人按 (0, 0) -> (0, 1) -> (-1, 1) -> (-1, 0) -> (0, 0) -> ... 进行移动。
提示:
1 <= instructions.length <= 100
instructions[i]
在{'G', 'L', 'R'}
中
Solution:
分情况讨论,设机器人位置为坐标(x,y)点,默认位置为(0,0),x,y的变化属于矢量,有大小有方向。
我们设上下左右分别为90度,270度,180度,0度方向。因此,机器人默认为90度方向
角度变化:
1、当左转时度数加90度
2、当右转时度数减90度
注:边界值当加到360度时,要重新从0度开始累加;同理当减到0度时,要重新从360开始减,以免出现负度数
位置变化(即遇到G命令):
1、当90度时,y加1
2、当180度时,x减1
3、当270度时,y减1
4、当0度时,x加1
只需要最多重复四次命令,直到再次出现0,0位置
Code:
class Solution:
def isRobotBounded(self,instruction):
'''
:param instruction: str
:return: bool
'''
x, y = 0, 0
direction = 90
for j in range(4):
for i in range(len(instruction)):
if instruction[i] == 'L':
if direction == 270:
direction = 0
else:
direction += 90
if instruction[i] == 'R':
if direction == 0:
direction = 270
else:
direction -= 90
if instruction[i] == 'G':
if direction == 90:
y += 1
if direction == 180:
x -= 1
if direction == 270:
y -= 1
if direction == 0:
x += 1
if x == 0 and y == 0:
return True
else:return False