zoukankan      html  css  js  c++  java
  • 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
    

    总的来说,就是菜。。 照着大神代码看- - - - - -

  • 相关阅读:
    牛客 公式字符串求值
    牛客 括号字符串的有效性和最长有效长度
    POJ-2533 Longest Ordered Subsequence ( DP )
    HDU-1160 FatMouse's Speed ( DP )
    HDU-1260 Tickets ( DP )
    HDU-1074 Doing Homework( 状压DP )
    HDU-1069 Monkey and Banana ( DP )
    HDU-1087 Super Jumping! Jumping! Jumping!( DP )
    HDU-3746 Cyclic Nacklace ( kmp )
    HDU-2087 剪花布条 ( kmp )
  • 原文地址:https://www.cnblogs.com/whyaza/p/10855381.html
Copyright © 2011-2022 走看看