LeetCode 657: Robot Return to Origin

Description

There is a robot starting at the position (0, 0), the origin, on a 2D plane. Given a sequence of its moves, judge if this robot ends up at (0, 0) after it completes its moves.

You are given a string moves that represents the move sequence of the robot where moves[i] represents its ith move. Valid moves are 'R' (right), 'L' (left), 'U' (up), and 'D' (down).

Return true if the robot returns to the origin after it finishes all of its moves, or false otherwise.

Note: The way that the robot is facing is irrelevant. 'R' will always make the robot move to the right once, 'L' will always make it move left, etc. Also, assume that the magnitude of the robot’s movement is the same for each move.

Constraints

  • 1 <= moves.length <= 2 * 104
  • moves only contains the characters 'U''D''L' and 'R'.

Examples

  • Example 1:
    Input: moves = "UD"
    Output: true
    Explanation: The robot moves up once, and then down once. All moves have the same magnitude, so it ended up at the origin where it started. Therefore, we return true.
  • Example 2:
    Input: moves = "LL"
    Output: false
    Explanation: The robot moves left twice. It ends up two moves to the left of the origin. We return false because it is not at the origin at the end of its moves.

Solution 1: Counter

Thought

The requirement for this problem is to check whether, after a series of moves, the robot returns to the original position. Therefore, we only need to verify that the number of L is equal to the number of R in the moves array, and the number of U is equal to the number of D.

Steps

  1. Use a counter moves_counter to keep track of the occurrences of each element in the moves array (if you don’t want to use the built-in Counter, you can implement it with a regular hash table).
  2. If the number of occurrences of 'U' is equal to the number of occurrences of 'D', and the number of occurrences of 'L' is equal to the number of occurrences of 'R', return True; otherwise, return False.

Codes

def judge_circle(moves: str) -> bool:
    moves_counter = Counter(moves)
    return (
        moves_counter.get('U') == moves_counter.get('D') and
        moves_counter.get('L') == moves_counter.get('R')
    )
Python

Complexities

  • Time Complexity: O(N),  where N represents the length of moves.
  • Space Complexity: O(N),  where N represents the length of moves.

References

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments

Table of Contents

Related Posts

LeetCode 136: Single Number

Given a non-empty array of integers nums, every element appears twice except for one. Find that single one.

You must implement a solution with a linear runtime complexity and use only constant extra space.

LeetCode 200: Number of Islands

Given an m x n 2D binary grid grid which represents a map of ‘1’s (land) and ‘0’s (water), return the number of islands.

An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically.

LeetCode 881: Boats to Save People

You are given an array people where people[i] is the weight of the ith person, and an infinite number of boats where each boat can carry a maximum weight of limit. Each boat carries at most two people at the