本题题意:
一开始一个机器人站在了(0,0)上,面朝的方向是北,收到三个序列G,L,R。
G:直走
L:向左转
R:向右转
按序执行,永远重复。
返回TRUE,若是处在一个圈。java
第一个卡住的点:
1.疑惑于机器人会不会不通过原点,而后还会出现一个圈?
不会。若在固定路线转圈,确定是重复了若干次,回到了原点。不然路线是不能固定的。ide
idea:
1.若是第一次执行完一串指令后,就在原点,则必定是固定路线。
2.若是执行完一串指令后,不在原点,新的方向是dir,则有下面的结论:
dir不是北方,就必定能够回到原点。
证实:
若是dir指向南方,则下一次执行完,就必定回到原点(方向180度)
若是dir指向东方,则四次执行完,就必定回到原点(方向90度)idea
更简单的讲,机器人重复四次执行,判断是否在原点就能够。code
第一次代码:io
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]
第二次代码class
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
总的来讲,就是菜。。 照着大神代码看- - - - - -di