1041. Robot Bounded In Circle
本题题意:
一开始一个机器人站在了(0,0)上,面朝的方向是北,收到三个序列G,L,R。
G:直走
L:向左转
R:向右转
按序执行,永远重复。
返回TRUE,如果处在一个圈。
第一个卡住的点:
1.疑惑于机器人会不会不经过原点,然后还会出现一个圈?
不会。若在固定路线转圈,肯定是重复了若干次,回到了原点。否则路线是不能固定的。
idea:
1.如果第一次执行完一串指令后,就在原点,则一定是固定路线。
2.如果执行完一串指令后,不在原点,新的方向是dir,则有下面的结论:
dir不是北方,就一定可以回到原点。
证明:
如果dir指向南方,则下一次执行完,就一定回到原点(方向180度)
如果dir指向东方,则四次执行完,就一定回到原点(方向90度)
更简单的讲,机器人重复四次执行,判断是否在原点就可以。
第一次代码:
def isRobotBounded(self, instructions: str) -> bool:
a = instructions* 4
d = 1
"""
1
2 4
3
"""
r = [0,1,2,3,4]
p = [0,0]
for i in a:
if i == 'L':
d = r[d + 1 if d + 1 != 5 else 1]
elif i == 'R':
d = r[d - 1 if d - 1 != 0 else 4]
else:
if d == 1:
p[1] += 1 #y + 1
elif d == 2:
p[0] -= 1 #x - 1
elif d == 3:
p[1] -= 1
else :
p[0] += 1
return p == [0,0]
第二次代码
def isRobotBounded(self, instructions: str) -> bool:
a = instructions* 4
d = 0
"""
0
3 1
2
i = (i + 1) % 4 will turn right
i = (i + 3) % 4 will turn left
"""
rec = [[0,1],[1,0],[0,-1],[-1,0]]
x, y = 0, 0
for i in a:
if i == 'L': d = (d + 3) % 4
elif i == 'R': d = (d + 1) % 4
else: x, y = x + rec[d][0], y + rec[d][1]
return x == 0 and y ==0
总的来说,就是菜。。 照着大神代码看- - - - - -