力扣团队买了一个可编程机器人,机器人初始位置在原点(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的长度 <= 1000command由U,R构成,且至少有一个U,至少有一个R0 <= x <= 1e9, 0 <= y <= 1e90 <= obstacles的长度 <= 1000obstacles[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版权协议,转载请附上原文出处链接和本声明。