874. Walking Robot Simulation
874. Walking Robot Simulation
这是一个简单,但是设计的很好的面试题。并没有困难的算法,考验的是一个软件工程师能都写出清晰、简洁代码的能力,以及一些细节问题。
问题
1 | A robot on an infinite XY-plane starts at point (0, 0) and faces north. The robot can receive one of three possible types of commands: |
例子
1 | Example 1: |
思路
我是这样想这个题的,为了模拟机器人行动,我们需要一对坐标记录机器人的位置,需要一个方向状态跟踪路径,最后计算长度。首先肯定要遍历所有的指令,而指令分三种:前进、左转和右转。那么程序的基本架构如下:
1 | def robotSim(self, commands: List[int], obstacles: List[List[int]]) -> int: |
现在我们只需要分别应对三种不同的命令。对于,左右转我们需要弄清执行指令后的方向,即需要一个(当前方向,行动) -> 新方向
的映射,我们可以写函数,或者直接用字典,总共是8中情况:
1 | state = { |
下一步就是前进的部分。这部分有两个问题:xy方向的变化,处理障碍物。xy的方向变化其实是一个(方向) -> (dx, dy)
的映射:
1 | step = { |
而如果dx dy 让我们移动到了障碍物,则这个移动不能完成。
最终我们得到如下代码:
1 | class Solution: |