输出回旋矩阵的方法,循环和迭代2种方式

public class SquareDemo {


    public static void doSquare(int length){
        int[][]  array= new int[length][length];
        //计算出10的对方
        int maxNum = (int) Math.log10(length*length);
        //用来补位
        StringBuilder stringBuilder = new StringBuilder("");
        for(int i=0;i=array.length||array[y][x]!=0){
                    if(x<0){
                        x++;
                    }else if(x>=array.length){
                        x--;
                    }else{
                        //如果是到了已经填写的数组,则需要还原下标
                        x='-'==cando?++x:--x;
                    }
                    canchange++;
                    if(canchange>2){
                        cando = cando=='+'?'-':'+';
                        canchange = 1;
                    }
                    //掉转方向计算新的下标
                    dir = 'y';
                    if('+'==cando){
                        y++;
                    }
                    else{
                        y--;
                    }

                }
            }else if('y'==dir){
                if('+'==cando){
                    y++;
                }
                else{
                    y--;
                }
                if(y<0||y>=array.length||array[y][x]!=0){
                    canchange++;
                    if(y<0){
                        y++;
                    }else if(y>=array.length){
                        y--;
                    }else{
                        y='-'==cando?++y:--y;
                    }
                    if(canchange>2){
                        cando = cando=='+'?'-':'+';
                        canchange = 1;
                    }

                    if('+'==cando){
                        x++;
                    }
                    else{
                        x--;
                    }
                    dir = 'x';
                }
            }
        }
    }

    public static void cal(int[][] array,int x,int y,int index,char dir,char cando,int canchange){
        array[y][x] = index;
        //X方向
        if('x'==dir){
            if('+'==cando){
                x++;
            }
            else{
                x--;
            }
            //如果超过范围或者已经被填写的值
            if(x<0||x>=array.length||array[y][x]!=0){
                if(x<0){
                    x++;
                }else if(x>=array.length){
                    x--;
                }
                else if(array[y][x]!=0&&array[y][x]!=index){
                    x='-'==cando?++x:--x;
                }
                canchange++;
                if(canchange>2){
                    cando = cando=='+'?'-':'+';
                    canchange = 1;
                }

                if('+'==cando){
                    y++;
                }
                else{
                    y--;
                }
                if(index<(array.length*array.length)){
                    cal(array,x,y,++index,'y',cando,canchange);
                }
            }else{
                if(index<(array.length*array.length)){
                    cal(array,x,y,++index,dir,cando,canchange);
                }
            }
        }
        if('y'==dir){
            if('+'==cando){
                y++;
            }
            else{
                y--;
            }
            if(y<0||y>=array.length||array[y][x]!=0){
                canchange++;

                if(y<0){
                    y++;
                }
                else if(y>=array.length){
                    y--;
                }
                else if(array[y][x]!=0&&array[y][x]!=index){
                    y='-'==cando?++y:--y;
                }
                if(canchange>2){
                    cando = cando=='+'?'-':'+';
                    canchange = 1;
                }

                if('+'==cando){
                    x++;
                }
                else{
                    x--;
                }
                if(index

 

你可能感兴趣的:(输出回旋矩阵的方法,循环和迭代2种方式)