一、题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.
- new comming
解题思路
- 题目实际要求的是返回一个vector类型的数组
- 顺时针打印矩阵到数组中,实际即按顺时针方向存储行和列到数组中
- 针对行和列不相等的情况,经过多次整圈打印之后,会剩余一行或一列,这同样可采用打印行或者列的代码来打印;为避免整圈打印时,从左到有和从右到左打印的同一行,因此可在for循环中条件加入判断前后不是同一行;针对避免同一列也是同样的做法。
二、实现代码
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
int row = matrix.size();
int col = matrix[0].size();
//定义返回的向量
vector<int> res;
//计算沿着矩形循环输出的次数
//int circle = (row>col?col:row)/2;
int circle=((row<col?row:col)-1)/2+1;
for(int i=0;i!=circle;i++){
//输出从左往右的这一行
for(int j=i;j!=col-i;j++){
res.push_back(matrix[i][j]);
}
//存储从上到下的这一行
for(int k= i+1;k!=row-i;k++){
res.push_back(matrix[k][col-i-1]);
}
//存储从右往左的这一行
for(int m=col-i-2;(m>=i)&&(i!=row-i-1);m--){
res.push_back(matrix[row-i-1][m]);
}
//存储从下到上的这一行
for(int n= row-i-2;(n>i)&&(i!=col-i-1);n--){
res.push_back(matrix[n][i]);
}
}
return res;
}
};