class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
int up = 0 , left = 0;
int down = matrix.size()-1 , right;
if(down == -1) return {};
else right = matrix[0].size()-1; //特殊情况考虑
vector<int> res;
char flag = 'r'; //四种标志代表本次向哪个方向遍历
while(up <= down && left <= right){ //边界模拟up down left right代表的是当前可遍历到的边界
if(flag == 'r'){
for(int i = left;i <= right;i++) res.push_back(matrix[up][i]);
up++;
flag = 'd';
}
else if(flag == 'd'){
for(int i = up;i <= down;i++) res.push_back(matrix[i][right]);
right--;
flag = 'l';
}
else if(flag == 'l'){
for(int i = right;i >= left;i--) res.push_back(matrix[down][i]);
down--;
flag = 'u';
}
else if(flag == 'u'){
for(int i = down;i >= up;i--) res.push_back(matrix[i][left]);
left++;
flag = 'r';
}
}
return res;
}
};