leetcode-LCP 03.机器人大冒险

题目: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;

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值