class Solution {
public int robotSim(int[] commands, int[][] obstacles) {
//direction表示当前朝向,0123分别表示北东南西
int ans=0,direction=0,x=0,y=0;
int[][] Directions={{0,1},{1,0},{0,-1},{-1,0}};//静态二维数组,依次存北东南西坐标变化
int nextX,nextY;
HashSet<String> set=new HashSet<>(); //收录所有障碍点的集合
for(int[] o : obstacles){
set.add(o[0]+","+o[1]);
}
for(int com : commands){
if(com>0){ //向北 direction默认为0,也就是Directions数组的第一个
for(int i=0;i<com;i++){ //因为Directions是一步一步走的,所以要多次循环
nextX=x+Directions[direction][0];//开始位移,找清楚Directions数组的关系
nextY=y+Directions[direction][1];
if(set.contains(nextX+","+nextY)){ //有障碍了,直接跳出循环
break;
}
x=nextX;
y=nextY;
ans=Math.max(ans,x*x+y*y);
}
}else{
//改变朝向 误区,题目中的-1,-2是在改变方向后的基础上再转向,不是单纯的-1就一定是东,-2一定是西, //故应该采用下列式子,来取%,便可得出一个适应性变化的方向
direction = com == -1 ? (direction + 1) % 4 : (direction + 3) % 4;
}
}
return ans;
}
}
力扣874 java贪心法实现模拟行走机器人 有详细注释哦!
最新推荐文章于 2023-05-10 11:45:21 发布