Featured image of post 874. 模拟行走机器人

874. 模拟行走机器人

题目描述

机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands

  • -2 :向左转 90
  • -1 :向右转 90
  • 1 <= x <= 9 :向前移动 x 个单位长度

在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位于网格点  obstacles[i] = (x<sub>i</sub>, y<sub>i</sub>)

机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝试进行该路线的其余部分。

返回从原点到机器人所有经过的路径点(坐标为整数)的最大欧式距离的平方。(即,如果距离为 5 ,则返回 25

注意:

  • 北表示 +Y 方向。
  • 东表示 +X 方向。
  • 南表示 -Y 方向。
  • 西表示 -X 方向。

示例 1:

  • 输入:commands = [4,-1,3], obstacles = []
  • 输出:25
  • 解释: 机器人开始位于 (0, 0):
  1. 向北移动 4 个单位,到达 (0, 4)
  2. 右转
  3. 向东移动 3 个单位,到达 (3, 4) 距离原点最远的是 (3, 4) ,距离为 32 + 42 = 25

示例 2:

  • 输入:commands = [4,-1,4,-2,4], obstacles = [[2,4]]
  • 输出:65
  • 解释:机器人开始位于 (0, 0):
    1. 向北移动 4 个单位,到达 (0, 4)
    2. 右转
    3. 向东移动 1 个单位,然后被位于 (2, 4) 的障碍物阻挡,机器人停在 (1, 4)
    4. 左转
    5. 向北走 4 个单位,到达 (1, 8)
  • 距离原点最远的是 (1, 8) ,距离为 12 + 82 = 65

提示:

  • 1 <= commands.length <= 104
  • commands[i] is one of the values in the list [-2,-1,1,2,3,4,5,6,7,8,9].
  • 0 <= obstacles.length <= 104
  • -3*104 <= xi, yi <= 3*104
  • 答案保证小于 231

解法一:哈希表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
func robotSim(commands []int, obstacles [][]int) int {
    set := make(map[int]bool)
    for _, obstacle := range obstacles {
        set[obstacle[0]*60001+obstacle[1]] = true
    }

    dirs := [][]int{{-1, 0}, {0, 1}, {1, 0}, {0, -1}}
    px, py, d, res := 0, 0, 1, 0
    for _, c := range commands {
        if c < 0 {
            if c == -1 {
                d = (d + 1) % 4
            } else if c == -2 {
                d = (d + 3) % 4
            }
        } else {
            for i := 0; i < c; i++ {
                if set[(px+dirs[d][0])*60001+py+dirs[d][1]] {
                    break
                }
                px += dirs[d][0]
                py += dirs[d][1]
                if px*px+py*py > res {
                    res = px*px + py*py
                }
            }
        }
    }
    return res
}
Licensed under CC BY-NC-SA 4.0
最后更新于 2023/07/19 22:28:54
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计