力扣团队买了一个可编程机器人,机器人初始位置在原点(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]
不为原点或者终点
C++
class Solution {
public:
bool robot(string command, vector<vector<int>>& obstacles, int x, int y)
{
int s=0;
int t=0;
int xx=0;
int yy=0;
for(auto c:command)
{
if('U'==c)
{
yy++;
}
else
{
xx++;
}
}
int flag=0;
for(auto c:command)
{
for(auto it:obstacles)
{
if(it[0]<=x && it[1]<=y && (it[0]-s)/xx==(it[1]-t)/yy && 0==(it[0]-s)%xx && 0==(it[1]-t)%yy)
{
return false;
}
}
if((x-s)/xx==(y-t)/yy && 0==(x-s)%xx && 0==(y-t)%yy)
{
flag=1;
}
if(c=='U')
{
t++;
}
else
{
s++;
}
}
return flag;
}
};
版权声明:本文为qq_27060423原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。