分析
每遍历一层,就把这一层削去,控制边界即可实现。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>ans;
if(matrix.empty())return ans;
int u=0,d=matrix.size()-1;//上下边界
int l=0,r=matrix[0].size()-1;//左右边界
while(true){
for(int i=l;i<=r;i++)ans.push_back(matrix[u][i]);//从左到右
if(++u>d)break;
for(int i=u;i<=d;i++)ans.push_back(matrix[i][r]);//从上到下
if(--r<l)break;
for(int i=r;i>=l;i--)ans.push_back(matrix[d][i]);//从右到左
if(--d<u)break;
for(int i=d;i>=u;i--)ans.push_back(matrix[i][l]);//从下到上
if(++l>r)break;
}
return ans;
}
};