剑指offer——顺使针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数
字,例如,如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.。

思路是这样的在这里插入图片描述
从外圈往里圈打印,首先要计算出他的层数(需要打印几圈,是和最短边有关)
写一个二维矩阵,免得测试手写

   public static int [][] procte(int row){
            int[][] array = new int[row][row];
            int count =0;
            for (int i = 0; i < array.length; i++) {
                for (int j = 0; j <array[i].length ; j++) {
                    array[i][j] = count++;
                }
            }
            return array;
        }

关键代码

  public static void print(int[][] array){
        int row  = array.length ;//获取行数
        int col =  array[0].length;//获取列数
        int x=0;
        int y=0;
//        System.out.print(array[x][y]+"  ");
        for (int i = 0; i < (col + 1) / 2; i++) {

            //从左向右遍历
            for (int j = y; j < col - i-1; j++) {
                System.out.print (array[x][y++]+" ");
            }

            //从上到下遍历
            for (int j = x; j < row - i-1; j++) {
                System.out.print (array[x++][y]+" ");
            }

            //从右到左遍历
            for (int j = y; j > i ; j--) {
                System.out.print (array[x][y--]+" ");
            }

            //从下向上
            for (int j = x; j > i+1; j--) {
                System.out.print (array[x--][y]+" ");
            }

        }
        System.out.print(array[x][y]);//细节,最后一个打印不上去,所以把最后一个写出来
    }

测试直接调用

 public static void main(String[] args) {
        int[][] procte = procte(4);
        for (int i = 0; i < procte.length; i++) {
            for (int j = 0; j <procte[i].length ; j++) {
                System.out.print(procte[i][j]+" ");
            }
            System.out.println();
        }
        print(procte);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值