public class Solution {
public int robotSim(int[] commands, int[][] obstacles) {
//定一个set,存储障碍物。把障碍物的XY坐标用String拼接保存即可
HashSet<String> set = new HashSet<>();
for(int i = 0;i < obstacles.length;i++){
set.add(obstacles[i][0] + "_" + obstacles[i][1]);
}
//制定一个方向dir
//北:0,东:1,南:2,西:3
//这样就可以得出
// 右转 = (dir + 1) % 4
// 左转 = (dir -1 + 4) % 4 = (dir + 3) %4
int dir = 0;
//结合方向数组,制定X,Y的行进数组
// 北,东,南,西
int[] dx = {0,1,0,-1};
int[] dy = {1,0,-1,0};
//初始坐标x,y = 0在原点
int x = 0;
int y = 0;
//初始化返回值为0
int res = 0;
for(int i : commands){
if(i == -2){
//左转
dir = (dir + 3) % 4;
}else if(i == -1){
//右转
dir = (dir + 1) % 4;
}else{
//行进
for(int step = 0;step < i;step++){
//下一个坐标是
int nextX = x + dx[dir];
int nextY = y + dy[dir];
//判断是不是障碍物,如果存在set,则此次行进终止,执行下一个操作,否则xy行进
if(set.contains(nextX + "_" + nextY)){
break;
}else {
x = nextX;
y = nextY;
}
}
//行进完成后比对最远距离
res = Math.max(res, x*x + y*y);
}
}
return res;
}
}