zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    bzoj1966:[AHOI2005]病毒检测
    bzoj2938:[Poi2000]病毒
    bzoj3172:[Tjoi2013]单词
    luoguP3808[模板]AC自动机(简单版)
    luoguP3796[模板]AC自动机(加强版)
    Java 基本类型、封装类型、常量池、基本运算
    Java 内存分配(转)
    Java 数组ArrayList语法
    Java的修饰、继承、接口、抽象类
    2019数模国赛有感
  • 原文地址:https://www.cnblogs.com/seyjs/p/10853771.html
Copyright © 2011-2022 走看看