每日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
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。