小景哥哥

世界很大,而我们还需要再成长!

您现在的位置是:首页>爱编程>详细内容

顺时针打印矩阵

发布时间:2018-08-13 00:00:00编辑:Jason浏览(165)评论(0)

    19.顺时针打印矩阵
    题目描述
     
    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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[][] array) {

            ArrayList<Integer> result = new ArrayList<Integer>();

            if (array.length == 0)

                return result;

            int rows = array.length, columns = array[0].length;

            if (array == null)

                return result;

            int layers = Math.min(rows, columns) / 2 + Math.min(rows, columns) % 2;// 这个是层数(圈数),偶数时正好可以整除,奇数时相当于先加1再除以2

            int i,j,k;

            for (i = 0; i < layers; i++) {

                for(j = i; j <= columns - i - 1; j++)

                    result.add(array[i][j]);

                for(k = i + 1; k <= rows - i - 1; k++)

                    result.add(array[k][j - 1]);

                for(j = columns - i -2; j >= i && rows - i - 1 > i && columns - i - 1 > i; j--)

                    result.add(array[k - 1][j]);

                for(k = rows - i - 2; k > i && columns - i - 1 > i && rows - i - 2 > i;k--)

                    result.add(array[k][j + 1]);

            }

            return result;

        }


     

关键字词:offer

上一篇:二叉树的镜像

下一篇:包含min函数的栈