class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
int m = matrix.size(), n = matrix[0].size();
int layer = min((m + 1) / 2, (n + 1) / 2);
for (int k = 0; k < layer; k++) {
if (m - 2 * k == 1) {
for (int j = k; j < n - k; j++) {
res.push_back(matrix[k][j]);
}
}
else if (n - 2 * k == 1) {
for (int i = k; i < m - k; i++) {
res.push_back(matrix[i][n - 1 - k]);
}
}
else {
for (int j = k; j < n - 1 - k; j++) {
res.push_back(matrix[k][j]);
}
for (int i = k; i < m - 1 - k; i++) {
res.push_back(matrix[i][n - 1 - k]);
}
for (int j = n - 1 - k; j > k; j--) {
res.push_back(matrix[m - 1 - k][j]);
}
for (int i = m - 1 - k; i > k; i--) {
res.push_back(matrix[i][k]);
}
}
}
return res;
}
};