剑指offer-面试题20-顺时针打印矩阵

来源:互联网 发布:网络销售现货有前途吗 编辑:程序博客网 时间:2024/06/11 23:44

题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次扫印出每一个数字。

这里写图片描述

题目解析:主要是对行号和列号的控制

//顺时针打印矩阵    public static void printMatrix(int[][] arr) {        if (arr == null) {            return;        }        int x = 0, y = 0;//行x列y        //一圈一圈的打印        while (x <= (arr.length - 1) / 2 && y < (arr[0].length - 1) / 2) {            printCircle(arr, x, y);            x++;            y++;        }    }    //根据圈的最左上角坐标打印一圈    public static void printCircle(int[][] arr, int x, int y) {        int rows = arr.length;        int columns = arr[0].length;        //输出最上面一行        for (int i = y; i <= columns - y - 1; i++) {            System.out.print(arr[x][i] + " ");        }        //输出圈的最右边一列,这一列可能只有一个数据        if (rows - x - 1 > x) {//rows-x-1是输出行的下一行的行号            for (int i = x + 1; i <= rows - x - 1; i++) {                System.out.print(arr[i][columns - y - 1] + " ");            }        }        //输出最下面的一行        if (rows - x - 1 > x && columns - y - 1 > y) {            for (int i = columns - y - 2; i >= y; i--) {                System.out.print(arr[rows - x - 1][i] + " ");            }        }        if (columns - 1 - y > y && rows - 1 - x > x + 1) {            // 因为最左边那一列的第一个和最后一个已经被输出了            for (int i = rows - 1 - x - 1; i >= x + 1; i--) {                System.out.print(arr[i][y] + " ");            }        }    }
0 0
原创粉丝点击