本題題意:
一開始一個機器人站在了(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