【题目描述】
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
【解题思路】
此解题思路受平台大神启发:将打印过程看成:输出矩阵的第一行,然后删除第一行并将矩阵向左旋转90°,再输出矩阵第一行,然后再删除第一行并将矩阵向左旋转90°,就这样直到矩阵中的元素都被删完结束遍历。
【代码如下】
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> result;
if(matrix.size() == 0)
return result;
for(int i = 0; i < matrix[0].size(); i++)
result.push_back(matrix[0][i]);
matrix = Delraw(matrix);
if(matrix.size() == 0)
return result;
matrix = rotation(matrix);
while(matrix.size() != 0)
{
for(int i = 0; i < matrix[0].size(); i++)
result.push_back(matrix[0][i]);
matrix = Delraw(matrix);
if(matrix.size() == 0)
break;
matrix = rotation(matrix);
}
return result;
}
vector<vector<int>> rotation(vector<vector<int>> matrix)//向左旋转
{
int m = matrix.size();
int n = matrix[0].size();
vector<int> a(m,0);
vector<vector<int> > re(n,a);
if(m == 1 && n == 1)
return matrix;
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
re[n-1-j][i] = matrix[i][j];
}
}
return re;
}
vector<vector<int>> Delraw(vector<vector<int>> matrix)//删除第一行
{
vector<vector<int>> re;
for(int i = 1; i < matrix.size(); i++)
re.push_back(matrix[i]);
return re;
}
};