一、题目
二、思路
1)新建四个变量,top、botton、left、right,分别代表上下左右四个边界
2)while循环,循环一次即环绕一次,while条件为top边界<=(matrix.size()-1)/2 && left边界<=(matrix[0].size()-1)/2)
3)每一次循环
- 从左到右遍历,遍历完,top++
- 从上到下遍历,遍历完,right–
- 从由到左遍历,条件加上top<=botton
- 从下到上遍历,条件加上left<=right
三、代码
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>res;
if(matrix.empty())
{
return res;
}
int rows=matrix.size();
int cols=matrix[0].size();
int left=0,right=cols-1;
int top=0,bottom=rows-1;
while(left<=right && top<=bottom)
{
for(int i=left;i<=right;++i)
{
res.emplace_back(matrix[top][i]);
}
top++;
for(int i=top;i<=bottom;++i)
{
res.emplace_back(matrix[i][right]);
}
right--;
for(int i=right;i>=left && top<=bottom;--i)
{
res.emplace_back(matrix[bottom][i]);
}
bottom--;
for(int i=bottom;i>=top && left<=right;--i)
{
res.emplace_back(matrix[i][left]);
}
left++;
}
return res;
}
};