力扣874 java贪心法实现模拟行走机器人 有详细注释哦!

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;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值