检查是否存在圆
问题内容:
在Google采访中有人问我这个问题。我们给了一个由字母F,L,R组成的字符串。-这是机器人遵循的指令
F-向前走一步。
向左转。
R-向右转。
字符串长度最大为2500个字符。
字符串可以无限次运行。我们需要判断是否存在一个半径为r的圆(r可以是任何实数),以使机器人永远不会离开圆。我被困在这一点上。我想到了使用凸包,但是如何无限期地对其进行检查。请帮忙。提前致谢
问题答案:
- 每次运行(一次运行将执行给定字符串的所有命令一次)会更改两件事:机器人寻找的方向及其位置(即,每次运行会将其移动某个矢量(此矢量的方向取决于其方向)运行前的初始方向)并将其旋转)。
-
可能的方向数为4。因此,在运行了4次仿真后,它的方向与最初的方向相同(每次摩擦都将其旋转相同的角度)。
-
这就是为什么连续运行4次只是将其平移了某个向量而没有任何旋转的原因。
-
因此,我们可以连续运行4次仿真,看看它是否在原始点停止。如果是这样,我们可以找到包含其路径的最小圆。否则,不存在这样的圈子。