class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.empty())
return {};
int row=matrix.size();
int col=matrix[0].size();
int i=0;
int t=0,b=row-1,l=0,r=col-1;
vector<int> ans;
while(true){
for(i=l;i<=r;i++){
ans.push_back(matrix[t][i]); //从左到右
}
if(++t>b)
break;
for(i=t;i<=b;i++){
ans.push_back(matrix[i][r]); //从上到下
}
if(--r<l)
break;
for(i=r;i>=l;i--){
ans.push_back(matrix[b][i]); //从右到左
}
if(--b<t) //注意每个方向都要判断循环条件,否则该方向结束后还会再走一步
break;
for(i=b;i>=t;i--){
ans.push_back(matrix[i][l]); //从下到上
}
if(++l>r)
break;
}
return ans;
}
};
剑指29:顺时针打印矩阵
最新推荐文章于 2022-09-19 09:51:23 发布