1. 程式人生 > 實用技巧 >每日LeetCode 657.機器人能否返回原點

每日LeetCode 657.機器人能否返回原點

題目概述:

在二維平面上,有一個機器人從原點 (0, 0) 開始。給出它的移動順序,判斷這個機器人在完成移動後是否在(0, 0) 處結束。

移動順序由字串表示。字元 move[i] 表示其第 i 次移動。機器人的有效動作有R(右),L(左),U(上)和 D(下)。如果機器人在完成所有動作後返回原點,則返回 true。否則,返回 false。

注意:機器人“面朝”的方向無關緊要。 “R” 將始終使機器人向右移動一次,“L” 將始終向左移動等。此外,假設每次移動機器人的移動幅度相同。

示例1:

輸入: "UD"
輸出: true
解釋:機器人向上移動一次,然後向下移動一次。所有動作都具有相同的幅度,因此它最終回到它開始的原點。因此,我們返回 true。

示例2:

輸入: "LL"
輸出: false
解釋:機器人向左移動兩次。它最終位於原點的左側,距原點有兩次 “移動” 的距離。我們返回 false,因為它在移動結束時沒有返回原點。

問題分析:

首先從輸入可以看出,輸入是由‘R,L,U,D’四個字母的組合。

而機器人從原點運動後又回到原點是一定需要偶數個字母的,比如輸入‘RL’可以返回,而‘L’; 'UDL','LURDR'這些奇數字母輸入是鄙人回不到原點的,因此可以先判斷輸入字母個數,為為奇數時直接返回False。

當輸入為偶數時,如何判斷機器人是否會返回原點呢?

當然最簡單的方法莫過於判斷輸入字元中各運動指令的次數,並對運動指令進行匹配對比,比如(‘R'=2) == (’L‘=2),向右行走了2步,又向左行走了2步,這時候可以判定可以回到原點,同理’上下‘也需要進行這樣的判斷,當’左右‘與’上下‘判斷都相等時,則返回True。

程式碼如下:

 1 class Solution:
 2     def judgeCircle(self, moves: str) -> bool:
 3         dic = {'R':0, 'L':0, '
U':0, 'D':0} 4 if len(moves) %2 != 0: 5 return False 6 l = len(moves) 7 for i in range(l): 8 if moves[i] == 'R': 9 dic['R'] += 1 10 if moves[i] == 'L': 11 dic['L'] += 1 12 if moves[i] == 'U': 13 dic['U'] += 1 14 if moves[i] == 'D': 15 dic['D'] += 1 16 if dic['R'] == dic['L'] and dic['U'] == dic['D']: 17 return True 18 else: 19 return False


來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/robot-return-to-origin
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。