class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> arr; //创建一个容器来存储最后打印结果
int wa=0,wz=matrix[0].size()-1,ha=0,hz=matrix.size()-1; //分别记录横向和纵向遍历的初始范围
int s=matrix.size()*matrix[0].size(); //矩阵总的元素个数
while(arr.size()<s){ //当容器中元素个数少于矩阵元素总数时循环执行(一次循环是顺时针一圈)
for(int i=wa;i<=wz;i++){ //从左到右
arr.push_back(matrix[ha][i]);
}
for(int i=ha+1;i<=hz;i++){ //从上到下
arr.push_back(matrix[i][wz]);
}
if(arr.size()<s){ //再次判断元素是否已遍历完毕,防止只有一行时又倒回重复遍历
for(int i=wz-1;i>=wa;i--){ //从右到左
arr.push_back(matrix[hz][i]);
}
}
if(arr.size()<s){ //再次判断元素是否已遍历完毕,防止只有一列时又倒回重复遍历
for(int i=hz-1;i>=ha+1;i--){ //从下到上
arr.push_back(matrix[i][wa]);
}
}
wz--;
hz--;
wa++;
ha++; //每遍历完一圈,起点和终点范围都缩小一个,所以遍历起点+1,终点-1。
}
return arr;
}
};