题目力扣团队买了一个可编程机器人,机器人初始位置在原点(0,0)。
小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种:
U:向y轴正方向移动一格
R:向x轴正方向移动一格。
不幸的是,在xy平面上还有一些障碍物,他们的坐标用obstacles表示。机器人一旦碰到障碍物就会被损毁。
给定终点坐标(x,y),返回机器人能否完好地到达终点。如果能,返回true;否则返回false。
示例1:输入:command="URR",obstacles=[],x=3,y=2输出:true
解释:U(0,1)-R(1,1)-R(2,1)-U(2,2)-R(3,2)。
示例2:输入:command="URR",obstacles=[[2,2]],x=3,y=2输出:false
解释:机器人在到达终点前会碰到(2,2)的障碍物。
示例3:输入:command="URR",obstacles=[[4,2]],x=3,y=2输出:true
解释:到达终点后,再碰到障碍物也不影响返回结果。
限制:
2=command的长度=1000
command由U,R构成,且至少有一个U,至少有一个R
0=x=1e9,0=y=1e9
0=obstacles的长度=1000
obstacles[i]不为原点或者终点
解题思路分析1、数学计算;时间复杂度O(n),空间复杂度O(1)

funcrobot(commandstring,obstacles[][]int,xint,yint)bool{ifjudge(command,x,y)==false{returnfalse}for_,node:=rangeobstacles{ifx=node[0]y=node[1]judge(command,node[0],node[1]){returnfalse}}returntrue}funcjudge(commandstring,x,yint)bool{u:=(command,"U")r:=(command,"R")times:=(x+y)/len(command)last:=command[:(x+y)%len(command)]uNum:=u*times+(last,"U")rNum:=r*times+(last,"R")ifuNum==yrNum==x{returntrue}returnfalse}总结Medium题目,x,y的数据量比较大,不建议依次遍历,机器人移动本质上是重复times次command,这个在坐标轴每一个times为点显示的话为一条直线,所以只需要考虑最后一次移动last统计x,y轴各走多少步,加上前面times次中累计x,y轴走的步数判断即可