题目:https://leetcode-cn.com/problems/programmable-robot/
答案:
Arrays.sort(obstacles, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]-o2[0]==0 ? o1[1]-o2[1] : o1[0]-o2[0];
}
});
int n = command.length();
int xCount = 0;
int yCount = 0;
for(int i=0;i<n;i++){
if(command.charAt(i) == 'U'){
yCount++;
}else{
xCount++;
}
}
int length = obstacles.length;
boolean isBack = false;
for(int i=0;i<length;i++){
if(obstacles[i][0]>x && obstacles[i][1]>y) break;
if(obstacles[i][0]<=x && obstacles[i][1]<=y && !(obstacles[i][0]==x && obstacles[i][1] == y)) {
int xNumber = obstacles[i][0] / xCount;
int x1 = obstacles[i][0] % xCount;
int yNumber = obstacles[i][1] / yCount;
int y1 = obstacles[i][1] % yCount;
if(xNumber<yNumber){
y1 = y1+yCount*(yNumber-xNumber);
}else{
x1 = x1 + xCount*(xNumber-yNumber);
}
if(x1==y1 && x1==0){
isBack=true;
break;
}else{
boolean isExit = false;
for(int j=0;j<n;j++){
if(command.charAt(j) == 'U'){
y1--;
}else{
x1--;
}
if(x1==0 && y1==0){
isExit = true;
break;
}
if(x1<0 || y1<0){
break;
}
}
if(isExit){
isBack = true;
break;
}
}
}
}
if(isBack) return false;
int xNumber = x/xCount;
int x1 = x%xCount;
int yNumber = y/yCount;
int y1 = y%yCount;
boolean isExit = false;
if(xNumber<yNumber){
y1 = y1+yCount*(yNumber-xNumber);
}else{
x1 = x1 + xCount*(xNumber-yNumber);
}
if(x1==y1 && x1==0){
isExit=true;
}else{
for(int j=0;j<n;j++){
if(command.charAt(j) == 'U'){
y1--;
}else{
x1--;
}
if(x1==0 && y1==0){
isExit = true;
break;
}
if(x1<0 || y1<0){
break;
}
}
}
return isExit;
}