剑指offer——29顺时针打印矩阵

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
 
题解:
  初始化一个左上角和一个右下角即可,然后顺时针打印,注意当只有一行和只有一列的时候
  
 1 class Solution {
 2 public:
 3     vector<int> printMatrix(vector<vector<int> > matrix) {
 4         int Lx = 0, Ly = 0, Rx = matrix.size() - 1, Ry = matrix[0].size() - 1;
 5         vector<int>res;
 6         while (Lx <= Rx && Ly <= Ry)
 7         {
 8             if (Lx == Rx)//只有一行
 9                 for (int i = Ly; i <= Ry; ++i)
10                     res.push_back(matrix[Lx][i]);
11             else if(Ly==Ry)//只有一列
12                 for (int i = Lx; i <= Rx; ++i)
13                     res.push_back(matrix[i][Ly]);
14             else
15             {
16                 for (int i = Ly; i < Ry; ++i)
17                     res.push_back(matrix[Lx][i]);
18                 for (int i = Lx; i < Rx; ++i)
19                     res.push_back(matrix[i][Ry]);
20                 for (int i = Ry; i > Ly; --i)
21                     res.push_back(matrix[Rx][i]);
22                 for (int i = Rx; i > Lx; --i)
23                     res.push_back(matrix[i][Ly]);
24             }
25             ++Lx, ++Ly;
26             --Rx, --Ry;
27         }
28         return res;
29     }
30 };