腾讯校招模拟面试题之蛇形打印

当输入一个数字N时,构造一个N*N的蛇形矩阵,即矩阵的数字1—N^2从外而内依次顺时针打印
当n=3时矩阵为
1 2 3
8 9 4
7 6 5
当n=5时矩阵为
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

当时候做题的时候想到是顺时针打印法,一直没有做出来,因为自己就是想不出从右到左和左下到左上,发来发现剑指offer有一题类似的http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking,就参考了一下。

public class test{

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNext()){
            int x=scanner.nextInt();
            if(x>0){
                printMatrix(x);
            }
        }
    }
    //打印算法
    public static int[][] printMatrix(int x) {
        int array[][]=new int[x][x];
        int n = x,m= x;
        int y=1;
        int layers = (Math.min(n,m)-1)/2+1;//这个是层数
        for(int i=0;ifor(int k = i;k//左至右
            for(int j=i+1;j1]=y++;//右上至右下
            for(int k=m-i-2;(k>=i)&&(n-i-1!=i);k--) array[n-i-1][k]=y++;//右至左
            for(int j=n-i-2;(j>i)&&(m-i-1!=i);j--) array[j][i]=y++;//左下至左上
        }
       for(int i=0;ifor(int j=0;jout.print(array[i][j]+" ");
           }
           System.out.println();
       }
        return array;       
    }
}

运行结果:腾讯校招模拟面试题之蛇形打印_第1张图片

你可能感兴趣的:(编程)