第19题——顺时针打印矩阵

231 阅读2分钟

题目:

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

普通思路:

找出打印的圈数,行数为rows,列数为columns,那么圈数就是矩阵短的对角线的一半,那么从左上到右上→从右上到右下→从右下到左下→从左下到左上,这样的过程为一圈

Java

package nowcoder;

import java.util.ArrayList;

public class S19_PrintMatrix {
    public ArrayList<Integer> printMatrix(int[][] matrix){
        ArrayList<Integer> result = new ArrayList<Integer>();
        int rows = matrix.length; //矩阵行数
        if (rows == 0)
            return result;
        int columns = matrix[0].length; //矩阵列数
        if (columns==0)
            return result;
        int cycles = ((rows < columns?rows:columns)-1)/2 +1; //圈数
        for (int i=0;i<cycles;i++){
            for (int k=i;k<columns-i;k++) //左到右
                result.add(matrix[i][k]);
            for (int j=i+1;j<rows-i;j++) //上到下;
                result.add(matrix[j][columns-1-i]);
            for (int k=rows-2-i;k>=i;k--) //右到左
                result.add(matrix[rows-1-i][k]);
            for (int j=rows-2-i;j>i;j--) //下到上
                result.add(matrix[j][i]);
        }
        return result;
    }
    public static void main(String[] args){
        S19_PrintMatrix s19 = new S19_PrintMatrix();
        int[][] matrix = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
        ArrayList<Integer> result = s19.printMatrix(matrix);
        System.out.println(result);
    }
}

特别思路:

可以模拟魔方逆时针旋转的方法,一直做取出第一行的操作 例如

1 2 3
4 5 6
7 8 9

输出并删除第一行后,再进行一次逆时针旋转,就变成:

6 9
5 8
4 7

继续重复上述操作即可。

Python

class PrintMatrix:
    def printMatrix(self, matrix):
        result = []
        while matrix:
            result += matrix.pop(0)
            if not matrix:
                break
            matrix = self.turn(matrix)
        return result
    def turn(self, matrix):
        #魔方旋转
        col = len(matrix[0]) #列数
        newMat = []
        for i in range(col, 0, -1):
            newMat.append([x[i-1] for x in matrix])
        return newMat
if __name__ == '__main__':
    test = PrintMatrix()
    matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
    print(test.printMatrix(matrix))

结果:

[1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10]