题目链接
思路分析
手动模拟顺时针打印
代码实现
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size();
if(m == 0)
return {};
int n = matrix[0].size();
vector<int> ret(m*n);
int u = 0;
int d = m-1;
int l = 0;
int r = n-1;
int index = 0;
while(1)
{
for(int i = l; i <= r; ++i)
{
ret[index++] = matrix[u][i];
}
if(++u > d)
break;
for(int i = u; i <= d; ++i)
{
ret[index++] = matrix[i][r];
}
if(--r < l)
break;
for(int i = r; i >= l; --i)
{
ret[index++] = matrix[d][i];
}
if(--d < u)
break;
for(int i = d; i >= u; --i)
{
ret[index++] = matrix[i][l];
}
if(++l > r)
break;
}
return ret;
}
};