【面试题20:顺时针打印矩阵】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunweiguo1/article/details/80356853

题目描述

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

image

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

实现思路

模拟魔方的旋转。

用旋转魔法的方式,一直取出第一行;

例如

1 2 3
4 5 6
7 8 9

输出并删除第一行后,变为

4 5 6
7 8 9

再进行一次逆时针旋转,就变成:

6 9
5 8
4 7

继续重复上述操作即可。

代码实现

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        int rows = matrix.length;
        ArrayList<Integer> list = new ArrayList<Integer>();

        while(rows > 0){
            for(int i=0;i<matrix[0].length;i++){
                list.add(matrix[0][i]);
            }    

            if(rows == 1){
                break;
            }

            matrix = revert(matrix);
            rows = matrix.length;
        }

        return list;
    }

    private int[][] revert(int[][] matrix){
        int rows = matrix.length;
        int cols = matrix[0].length;

        int[][] temp = new int[cols][rows-1];
        for(int j=cols-1;j>=0;j--){
            for(int i=1;i<rows;i++){
                temp[cols-1-j][i-1] = matrix[i][j];
            }
        }
        return temp;
    }
}
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页