• 【leetcode】1041. Robot Bounded In Circle


    题目如下:

    On an infinite plane, a robot initially stands at (0, 0) and faces north.  The robot can receive one of three instructions:

    • "G": go straight 1 unit;
    • "L": turn 90 degrees to the left;
    • "R": turn 90 degress to the right.

    The robot performs the instructions given in order, and repeats them forever.

    Return true if and only if there exists a circle in the plane such that the robot never leaves the circle.

    Example 1:

    Input: "GGLLGG"
    Output: true
    Explanation: 
    The robot moves from (0,0) to (0,2), turns 180 degrees, and then returns to (0,0).
    When repeating these instructions, the robot remains in the circle of radius 2 centered at the origin.
    

    Example 2:

    Input: "GG"
    Output: false
    Explanation: 
    The robot moves north indefinetely.
    

    Example 3:

    Input: "GL"
    Output: true
    Explanation: 
    The robot moves from (0, 0) -> (0, 1) -> (-1, 1) -> (-1, 0) -> (0, 0) -> ...
    

    Note:

    1. 1 <= instructions.length <= 100
    2. instructions[i] is in {'G', 'L', 'R'}

    解题思路:看到这个题目,我的感觉就是如果能回到起点,应该是执行instructions一次,两次或者四次。嘿嘿,当然我也不知道怎么证明,反正能AC。

    代码如下:

    class Solution(object):
        def process(self,start,instructions):
            for i in instructions:
                if i == 'G':
                    if start[2] == 'N':start[1] += 1
                    elif start[2] == 'S':start[1] -= 1
                    elif start[2] == 'E':start[0] += 1
                    elif start[2] == 'W':start[0] -= 1
                elif i == 'L':
                    if start[2] == 'N':start[2] = 'W'
                    elif start[2] == 'S':start[2] = 'E'
                    elif start[2] == 'E':start[2] = 'N'
                    elif start[2] == 'W':start[2] = 'S'
                elif i == 'R':
                    if start[2] == 'N':start[2] = 'E'
                    elif start[2] == 'S':start[2] = 'W'
                    elif start[2] == 'E':start[2] = 'S'
                    elif start[2] == 'W':start[2] = 'N'
            return start
    
        def isRobotBounded(self, instructions):
            """
            :type instructions: str
            :rtype: bool
            """
            start = [0,0,'N']
            end = self.process(start,instructions)
            if end[0] == end[1] == 0:
                return True
            end = self.process(start, instructions)
            if end[0] == end[1] == 0:
                return True
            end = self.process(start, instructions)
            end = self.process(start, instructions)
            if end[0] == end[1] == 0:
                return True
            return False
  • 相关阅读:
    ASP.NET请求管道、应用程序生命周期、整体运行机制
    PHP面试总结
    ASP.NET MVC源码分析系列
    SQL中的重要语句
    Nicescroll滚动条插件的用法
    Nunit2.5.10快速上手(笔记)
    ucore 源码剖析
    《ucore lab8》实验报告
    《ucore lab7》实验报告
    《ucore lab6》实验报告
  • 原文地址:https://www.cnblogs.com/seyjs/p/10853771.html
Copyright © 2020-2023  润新知