解法:模拟
思路:创建ret数组,用变量标记原矩阵的行数和列数,遍历一个元素就push_back进ret数组,每次遍历完一行或一列,相应行/列数--,进行顺时针螺旋遍历到为0即可。
细节:要有边界条件的判断,因为要保证 rows>0 && cols > 0,while循环中的某次for结束将对应rows-- 到0 / cols--到0,后面再继续就会出问题,解决方法就是再加一层if判断即可。
附上完整代码:
class Solution
{
public:
vector<int> spiralOrder(vector<vector<int>>& matrix)
{
vector<int> ret;
int rows = matrix.size(),cols = matrix[0].size();
int a = 0,b = -1;
while(rows > 0 && cols > 0)
{
for(int i = 0;i<cols;i++)
ret.push_back(matrix[a][++b]);
rows--;
for(int i = 0;i<rows;i++)
ret.push_back(matrix[++a][b]);
cols--;
if(rows > 0)
{
for(int i = 0;i<cols;i++)
ret.push_back(matrix[a][--b]);
rows--;
}
if(cols > 0)
{
for(int i = 0;i<rows;i++)
ret.push_back(matrix[--a][b]);
cols--;
}
}
return ret;
}
};