1041. Robot Bounded In Circle 機器人在圈圈裏面?

 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 degrees 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: instructions = "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: instructions = "GG"
Output: false
Explanation: The robot moves north indefinitely.

Example 3:

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

 

Constraints:

  • 1 <= instructions.length <= 100
  • instructions[i] is 'G''L' or, 'R'.


Leetcode有很多機器人走路問題
起手式 要記住 左轉 右轉的寫法
機器人有四個state 位置 兩個,方向兩個,(x,y) 和 (dx,dy)

如果走回原點,則會固定。
這題最困難的事情是 如果最後走的方向是向北,那就會一路向北走 否則就一定會bound
證明不是很簡單
大家可以想一下:


class Solution:
    def isRobotBounded(self, instructions: str) -> bool:
        dirx, diry=0,1
        x,y=0,0
        
        for d in instructions:
            if d== "G":
                x,y=x+dirx, y+diry
            elif d=="L":
                dirx, diry=-1*diry, dirx
            else:
                dirx, diry=diry, -dirx
        return (x,y)==(0,0) or (dirx, diry)!=(0,1)

留言

這個網誌中的熱門文章

382. Linked List Random Node: 隨機選元素從list裡面

2134. Minimum Swaps to Group All 1's Together II 使得所有1連在一起