1041. Robot Bounded In Circle

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

相關文章
相關標籤/搜索