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; }}