剑指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 };