剑指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度,再读取第一行,这样循环,直到最后一行结束。具体看代码中注释。
我的答案
| 12
 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;
 }
 }
 
 |