class Solution {
public:
vector<int>v;
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int top=0,bot=matrix.size()-1,left=0,right=matrix[0].size()-1;
//top是上边缘,bot是下边缘
int num=1;
int len=(bot+1)*(right+1);
//所有元素的个数为len
while(num<=len)
{
for(int i=left;i<=right&&num<=len;i++)
{
v.push_back(matrix[top][i]);
num++;
}
top++;
for(int i=top;i<=bot&&num<=len;i++)
{
v.push_back(matrix[i][right]);
num++;
}
right--;
for(int i=right;i>=left&&num<=len;i--)
{
v.push_back(matrix[bot][i]);
num++;
}
bot--;
for(int i=bot;i>=top&&num<=len;i--)
{
v.push_back(matrix[i][left]);
num++;
}
left++;
}
return v;
}
};
关键是用四个变量去模拟顺时针遍历的顺序,初见可能难写。