题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
样例
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
算法1
class Solution {
public:
//向左旋转数组90度
void rotateVec(vector<vector<int> > &vec) {
if (!vec.size()) return;
//构造一个临时vector存储数据
vector<vector<int>> v(vec[0].size(), vector<int>(vec.size(), 0));
/* 从最后一列开始,以列为单位读取数据作为临时vector的行
* 旋转即:将原vector的每列数据作为临时vector的行
* vec[0].size() --- 列数
* vec.size() --- 行数
*/
for (int i = vec[0].size() - 1, cur = 0; i >= 0; cur++, i--)
{
for (int j = 0; j < vec.size(); j++)
{
v[cur][j] = vec[j][i];
}
}
//删除原数组
vec.erase(vec.begin(), vec.end());
//将临时数组赋值到新数组中
vec = v;
}
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> v;
if (!matrix.size()) return v;
int rows = matrix.size(), cols = matrix[0].size();
int a = 2;
while (matrix.size())
{
for (int j = 0; j < matrix[0].size(); j++)
{
v.push_back(matrix[0][j]);
}
//每次读取完一行数据,将该行从数组中删除
matrix.erase(matrix.begin());
//旋转数组
rotateVec(matrix);
}
return v;
}
};