You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

机器人返回起点最小指令数算法面试问题求助

问题分析与解决方案

首先,我们需要明确机器人的核心状态:执行指令后的最终坐标和最终朝向,这是计算返回起点最少指令数的基础。以下是分场景的具体解法:

步骤1:预处理与状态模拟

先过滤输入字符串中的非大写F/L/R字符,然后模拟机器人移动,得到两个关键状态:

  • 最终坐标 (final_x, final_y)(初始为(0,0))
  • 最终朝向 final_dir(用0-3表示四个方向:0=北,1=东,2=南,3=西)

模拟规则:

  • F:根据当前朝向更新坐标:北→y+1,东→x+1,南→y-1,西→x-1
  • L:左转90度,final_dir = (final_dir - 1) % 4
  • R:右转90度,final_dir = (final_dir + 1) % 4

步骤2:分场景计算最少指令数

场景1:已在起点

如果final_x == 0且final_y == 0,直接返回0。

场景2:单方向位移(需抵消的位移仅在x或y轴上)

当required_dx = -final_x和required_dy = -final_y中有一个为0时,说明只需朝单一方向移动即可回到起点:

  1. 确定目标朝向target_dir:
    • required_dx > 0→东(1);required_dx < 0→西(3)
    • required_dy > 0→北(0);required_dy < 0→南(2)
  2. 计算从final_dir到target_dir的最少转向次数:
    diff = (target_dir - final_dir) % 4
    turns = min(diff, 4 - diff)
    
  3. 总指令数 = 转向次数 + 需移动的步数(abs(required_dx) + abs(required_dy))

示例验证:输入"RF"

  • 模拟后状态:final_x=1, final_y=0, final_dir=1
  • required_dx=-1,目标朝向为西(3)
  • 转向次数:min((3-1)%4,4-2)=2,步数1,总指令数2+1=3,符合示例输出。

场景3:双方向位移(需抵消的位移同时在x和y轴上)

当required_dx和required_dy均不为0时,需分两种移动顺序计算,取最小值:

顺序1:先处理x方向,再处理y方向

  1. 计算从final_dir转到x方向目标朝向的最少转向次数t1
  2. 加上x方向步数abs(required_dx)
  3. 从x方向转向到y方向(垂直方向,最少1步转向),加上y方向步数abs(required_dy)
    总次数:t1 + abs(required_dx) + 1 + abs(required_dy)

顺序2:先处理y方向,再处理x方向

  1. 计算从final_dir转到y方向目标朝向的最少转向次数t1'
  2. 加上y方向步数abs(required_dy)
  3. 从y方向转向到x方向(最少1步转向),加上x方向步数abs(required_dx)
    总次数:t1' + abs(required_dy) + 1 + abs(required_dx)

最终取两种顺序的最小值。

完整流程总结

  1. 过滤无效指令,模拟得到最终坐标和朝向
  2. 若已在起点,返回0
  3. 计算需抵消的位移required_dx、required_dy
  4. 单方向位移:计算转向次数+步数
  5. 双方向位移:计算两种顺序的总指令数,取最小值

内容的提问来源于stack exchange,提问作者tryingmybestlol98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:20:59