剑指offer-顺时针打印矩阵

来源:互联网 发布:redial 软件 编辑:程序博客网 时间:2024/05/16 04:58

题目描述
  输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, 例如, 如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10
题目分析
  顺时针打印矩阵,无非是将矩阵从左到右,然后从上到下,接着从右到左,最后从下到上,打印一圈,再从外到里,打印全部的圈。

public class 顺时针打印矩阵 {    public ArrayList<Integer> printMatrix(int[][] matrix) {        ArrayList<Integer> arr = new ArrayList<Integer>();        if (matrix == null)            return null;        int start = 0;        while (matrix[0].length > start * 2 && matrix.length > start * 2) {            printOneCircle(matrix, start, arr);            start++;        }        return arr;    }    private void printOneCircle(int[][] array, int start, ArrayList<Integer> arr) {        int columns = array[0].length;//1        int rows = array.length;//5        int endX = columns - 1 - start;//0        int endY = rows - 1 - start;//4        // 从左到右打印一行        for (int i = start; i <= endX; i++) {            int number = array[start][i];            arr.add(number);        }        // 从上到下打印一列        if (start < endY) {            for (int i = start + 1; i <= endY; i++) {                int number = array[i][endX];                arr.add(number);            }        }        // 从右到左打印一行        if (start < endX && start < endY) {            for (int i = endX - 1; i >= start; i--) {                int number = array[endY][i];                arr.add(number);            }        }        // 从下到上打印一列        if (start < endX && start < endY - 1) {            for (int i = endY - 1; i >= start + 1; i--) {                int number = array[i][start];                arr.add(number);            }        }    }    public static void main(String[] args) {        int[][] arr = { {1},{2},{3},{4},{5} };        顺时针打印矩阵 test = new 顺时针打印矩阵();        System.out.println(test.printMatrix(arr).size());        for(int i=0;i<test.printMatrix(arr).size();i++)            System.err.println(test.printMatrix(arr).get(i));    }}
0 0
原创粉丝点击