JZ29 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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]
//旋转矩阵
vector<int>ans;
void re(vector<vector<int>>ma,vector<int>&ans,int r,int c){
if(ma.empty()||ma[0].empty())return;
if(r<=0||c<=0)return;
for(auto&a:ma[0])ans.push_back(a);
for(int i=1;i<r-1;i++)ans.push_back(ma[i].back());
if(r>1)
for(int i=ma[r-1].size()-1;i>=0;i--)ans.push_back(ma[r-1][i]);
if(c>1)
for(int i=r-2;i>0;i--)ans.push_back(ma[i].front());
vector<vector<int>>temp;
for(int i=1;i<r-1;i++){
vector<int>t;
for(int j=1;j<c-1;j++){
t.push_back(ma[i][j]);
}
temp.push_back(t);
}
re(temp,ans,r-2,c-2);
}
vector<int> printMatrix(vector<vector<int> > matrix) {
if(matrix.empty())return ans;
int r = matrix.size();
int c = matrix[0].size();
re(matrix,ans,r,c);
return ans;
}
int main() {
int r, c;
cin >> r >> c;
vector<vector<int> > matrix;
while (r--) {
vector<int>t;
int cc = c;
while (cc--) {
int n;
cin >> n;
t.push_back(n);
}
matrix.push_back(t);
}
vector<int>ans;
ans = printMatrix(matrix, ans);
return 0;
}