本题题意:
一开始一个机器人站在了(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
总的来说,就是菜。。 照着大神代码看- - - - - -