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

当输入一个数字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;i<layers;i++){
            for(int k = i;k<m-i;k++) array[i][k]=y++;//左至右
            for(int j=i+1;j<n-i;j++) array[j][m-i-1]=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;i<x;i++){
           for(int j=0;j<x;j++){
               System.out.print(array[i][j]+" ");
           }
           System.out.println();
       }
        return array;       
    }
}

运行结果:这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值