每日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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。