题目描述 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
解题思路
把矩阵看成由若干个顺时针方向的圈组成,循环打印矩阵中的每个圈,每次循环打印一个圈。打印一圈通常分为四步,第一步从左到右打印一行;第二步从上到下打印一列;第三步从右到左打印一行;第四步从下到上打印一列。
代码
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> nums;
int row = matrix.size();
int col = matrix[0].size();
if(row==0 || col==0) return nums;
vector<vector<int> > dirs = {{0,1},{1,0},{0,-1},{-1,0}};
vector<int> steps{row-1, col};
int index_x = 0, index_y = -1;
int idir = 0;
while(steps[(idir+1)%2]){
for(int i=0;i<steps[(idir+1)%2];i++){
index_x += dirs[idir][0];
index_y += dirs[idir][1];
nums.push_back(matrix[index_x][index_y]);
}
--steps[(idir+1)%2];
idir = (idir+1)%4;
}
return nums;
}
};