本文主要是介绍【leetcode】874. 模拟行走机器人,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 模拟行走机器人
机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令:
-2:向左转 90 度
-1:向右转 90 度
1 <= x <= 9:向前移动 x 个单位长度
在网格上有一些格子被视为障碍物。
第 i 个障碍物位于网格点 (obstacles[i][0], obstacles[i][1])
机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续该路线的其余部分。
返回从原点到机器人的最大欧式距离的平方。
示例 1:
输入: commands = [4,-1,3], obstacles = []
输出: 25
解释: 机器人将会到达 (3, 4)
示例 2:
输入: commands = [4,-1,4,-2,4], obstacles = [[2,4]]
输出: 65
解释: 机器人在左转走到 (1, 8) 之前将被困在 (1, 4) 处
提示:
0 <= commands.length <= 10000
0 <= obstacles.length <= 10000
-30000 <= obstacle[i][0] <= 30000
-30000 <= obstacle[i][1] <= 30000
答案保证小于 2 ^ 31
class Solution:def robotSim(self, commands: List[int], obstacles: List[List[int]]) -> int:d = [(0,1),(1,0),(0,-1),(-1,0)]tmp = res = 0x = y =0 obs = set(map(tuple,obstacles))for i in commands:if i == -1:tmp += 1elif i == -2:tmp += -1else:for _ in range(i):x += d[tmp%4][0]y += d[tmp%4][1]if (x,y) in obs:x -= d[tmp%4][0]y -= d[tmp%4][1]breakres = max(res,x**2 + y**2)return res
参考链接
这篇关于【leetcode】874. 模拟行走机器人的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!