码迷,mamicode.com
首页 > 其他好文 > 详细

顺时针打印矩阵

时间:2018-04-20 18:57:59      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:矩阵   nbsp   size   打印矩阵   []   打印   count   ==   说明   

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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。

我的想法是:每当将一行的所有元素都访问过,就将最小行(minRow)加一(访问完当前最小行的每一个元素),或者将最大行(maxRow)减一(访问完当前最大行的每一个元素)。每当将一列的所有元素都访问过,就将最大列(maxCol)减一(访问完当前最大列的每一个元素),或者最小列(minCol)加一(访问完当前最小列的每一个元素)。而每一次的顺时针访问就是将minRow、maxCol、maxRow、minCol 依次加一、减一、减一、加一。这样循环访问,当访问的个数是矩阵的个数的时候,说明已经将矩阵的所有元素都访问过一遍了。

代码如下:

public ArrayList<Integer> printMatrix(int [][] matrix) {

        if (matrix == null) return null;

        int minRow = 0, minCol = 0;         //最小行, 最小列
        int maxRow = matrix.length - 1;     //最大行
        int maxCol = matrix[0].length - 1;  //最大列
        int i = 0, j = 0;                   //i表示行, j表示列
        int count = matrix.length * matrix[0].length;
        ArrayList<Integer> arrayList = new ArrayList<>();

        while (arrayList.size() < count) {

            while (j <= maxCol && arrayList.size() < count) arrayList.add(matrix[i][j++]);
            minRow++;

            while (i <= maxRow && arrayList.size() < count) arrayList.add(matrix[i++][j]);
            maxCol--;

            while (j >= minCol && arrayList.size() < count) arrayList.add(matrix[i][j--]);
            maxRow--;

            while (i >= minRow && arrayList.size() < count) arrayList.add(matrix[i--][j]);
            minCol++;

            //加上最后一个
            if (arrayList.size() == count-1) {
                arrayList.add(matrix[i][j]);
            }

        }
        return arrayList;
}

 

顺时针打印矩阵

标签:矩阵   nbsp   size   打印矩阵   []   打印   count   ==   说明   

原文地址:https://www.cnblogs.com/yi-hui/p/8892683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!