顺时针打印矩阵

来源:互联网 发布:java贴吧 编辑:程序博客网 时间:2024/06/17 05:48

题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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 ArrayList<Integer> printMatrix(int [][] matrix) {        ArrayList<Integer> result = new ArrayList<>();        // 结果的最大长度(二位数组长度)        int maxCount = matrix.length*matrix[0].length;        // 当前结果的长度,用来判断二维数组中的值是否已经全部在结果中        int count = 0;        // 当前已经放了 几行/几列 数据在结果中        // 即从上往下数放了row行,从下往上数放了row行,从左往右数放了col列,从右往左放了col列        int row=0,col=0;        // 循环放入        while (count < maxCount){            // 依次代表上、右、下、左的数组下标移位            int i,j,k,l;            // 先从左到右放入上面一行            for(i = col; i < matrix[0].length-col; i++) {                result.add(matrix[row][i]);                count++;            }            // 放完即判断是否已经全部放入,下同            if(count >= maxCount)                break;            // 再从上到下放人右边的一列            for(j = row+1; j < matrix.length-row; j++){                result.add(matrix[j][i-1]);                count++;            }            if(count >= maxCount)                break;            // 再从右到左放入下面的一行            for(k = matrix[0].length-1-col-1; k >= col; k--){                result.add(matrix[j-1][k]);                count++;            }            if(count >= maxCount)                break;            // 再从下到上放人左边的一列            for(l = matrix.length-1-row-1; l >= row+1; l--){                result.add(matrix[l][k+1]);                count++;            }            if(count >= maxCount)                break;            // 如果成功放完一圈,行数和列数各加一            row++;            col++;        }        return result;    }

呕心沥血写出来的,转载请一定注明出处!