class Solution {
public:
vector<int> printMatrix(vector<vector<int>> matrix) {
int n = matrix.size();
int m = matrix[0].size();
vector<int> vec;
if (!n||!m) return vec;
int l = 0, r = m-1, u = 0, d = n-1;
while (l<r && u<d) {
for (int k=l; k<r; k++){
vec.push_back(matrix[u][k]);
}
for (int k=u; k<d; k++){
vec.push_back(matrix[k][r]);
}
for (int k=r; k>l; k--){
vec.push_back(matrix[d][k]);
}
for (int k=d; k>u; k--){
vec.push_back(matrix[k][l]);
}
l++; r--; u++; d--;
}
if (l==r) {
for (int k=u; k<=d; k++){
vec.push_back(matrix[k][r]);
}
}
else if (u==d) {
for (int k=l; k<=r; k++){
vec.push_back(matrix[u][k]);
}
}
return vec;
}
};
这题要注意顺时针旋转的时候每个方向要留最后一位不能和下一个方向的第一个重复所以用 < 或 > 。
最后剩余一行或一列要全部打印所以是 <=。



京公网安备 11010502036488号