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

posted @ 2020-08-28 21:17  ASTHNONT  阅读(214)  评论(0编辑  收藏  举报