LeetCode 657: Robot Return to Origin

問題描述

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.

限制條件

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

範例

  • 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.

解法一:計數器

解題思路

本題的要求是在經過一連串的移動後,檢查機器人是否會回到原點,因此我們只要確認在 moves 陣列中的所有 'L''R' 數量相同,且 'U''D' 的數量也相同即可。

步驟詳解

  1. 使用計數器 moves_counter 來統計 moves 中所有元素出現的次數(若不想使用原生的 Counter,也可以使用一般 hash table 來實現)。
  2. 'U' 出現次數與 'D' 出現次數一樣,且 'L' 出現次數與 'R' 出現次數一樣,回傳 True,否則回傳 False

程式碼

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

複雜度分析

  • 時間複雜度:O(N),其中 N 為 moves 的長度。
  • 空間複雜度:O(N),其中 N 為 moves 的長度。

參考資料

Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
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