剑指offer第十九题。
题目描述
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
解题思路
旋转打印有点难,不过也是有办法的。我们可以把矩阵想象为一个魔方,我读完第一行之后,我就把魔方左转90度,再读取第一行,这样循环,直到最后一行结束。具体看代码中注释。
我的答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> list = new ArrayList<>(); int row = matrix.length; while(row != 0){ for(int i=0;i<matrix[0].length;i++) list.add(matrix[0][i]); if(row == 1) break; matrix = revert(matrix); row = matrix.length; } return list; } private int[][] revert(int[][] matrix){ int rows = matrix.length; int cols = matrix[0].length; int[][] newMatrix = new int[cols][rows-1]; for(int j=cols-1;j>=0;j--){ for(int i=1;i<rows;i++){ newMatrix[cols-j-1][i-1] = matrix[i][j]; } } return newMatrix; } }
|