美文网首页
1138. 字母板上的路径

1138. 字母板上的路径

作者: 最困惑的时候就是能成长的时候 | 来源:发表于2019-08-12 17:15 被阅读0次

    1138. 字母板上的路径

    1.想法

    image.png

    从a出发到任意的点例如 l,最直接的就是先走竖行再走横行


    image.png

    有一个特殊情况是Z,只能向上走

    所以,我们的步骤是.先得到当前的位置信息,和要去的位置信息,最后进行移动

    2:代码

    class Solution {
        public String alphabetBoardPath(String target) {
            StringBuilder sb = new StringBuilder();
             char[][] board = new char[6][5];
             board[0] = new char[]{'a','b','c','d','e'};
             board[1] = new char[]{'f','g','h','i','j'};
             board[2] = new char[]{'k','l','m','n','o'};
             board[3] = new char[]{'p','q','r','s','t'};
             board[4] = new char[]{'u','v','w','x','y'};
             board[5] = new char[]{'z','0','0','0','0'};
             //字母板
             char[] chars = target.toCharArray();
             int startX=0,startY=0;
             char nowCh ='a';
             for(char c:chars){
                 if(nowCh == c){  //如果当前的字母和上一个相同,直接添加!
                     sb.append("!");
                 }else {
                     int[] pos = getMyCharPos(board, c);  //先得到位置
                     sb.append(getMyOrder(startX, startY, pos[0], pos[1]));//添加移动指令
                     startX = pos[0];  //移动到指令位置
                     startY = pos[1];
                 }
                 nowCh = c; //更新该char
             }
             return sb.toString();
        }
    
        private String getMyOrder(int startX, int startY, int endX, int endY) {
            StringBuilder sb = new StringBuilder();
            boolean flag = false;
            if(startX ==5&&startY == 0){
                sb.append("U");
                startX--;
            }
            if(endX == 5&&endY==0){
                endX--;
                flag = true;
            }
            //处理X
            if(startX<endX){
                while(endX!=startX){
                    sb.append("D");
                    startX++;
                }
            }else{
                while(endX!=startX){
                    sb.append("U");
                    startX--;
                }
            }
            //处理Y
            if(startY<endY){
                while(endY!=startY){
                    sb.append("R");
                    startY++;
                }
            }else{
                while(endY!=startY){
                    sb.append("L");
                    startY--;
                }
            }
            if(flag){
                sb.append("D");
            }
            sb.append("!");
            return sb.toString();
        }
    
        private int[] getMyCharPos(char[][] board, char c) {
            int[] pos = new int[2];
            for(int i=0;i<board.length;i++){
                if(board[i][0] == c){
                    pos[0] = i;
                    pos[1] = 0;
                    break;
                }
                if(board[i][0] <c&&board[i+1][0]>c){
                    for(int j=0;j<board[i].length;j++){
                        if(board[i][j] == c){
                            pos[0] = i;
                            pos[1] = j;
                        }
                    }
                }
            }
            return pos;
        }
    }
    

    相关文章

      网友评论

          本文标题:1138. 字母板上的路径

          本文链接:https://www.haomeiwen.com/subject/banujctx.html