题目来源:
leetcode题目,网址:LCR 146. 螺旋遍历二维数组 - 力扣(LeetCode)
解题思路:
按要求遍历即可。
解题代码:
class Solution {
public:
vector<int> spiralArray(vector<vector<int>>& array) {
vector<int> res;
if(array.size()==0){
return res;
}
vector<vector<int>> dir={{0,1,0,-1},{1,0,-1,0}};
int size=min(array.size(),array[0].size());
int cir=size%2==0?size/2:size/2+1;
for(int i=0;i<cir;i++){
int x=i;
int y=i;
res.push_back(array[x][y]);
bool right_move=false;
bool down_move=false;
cout<<i<<endl;
for(int j=0;j<array[0].size()-i*2-1;j++){
right_move=true;
x+=dir[0][0];
y+=dir[1][0];
res.push_back(array[x][y]);
}
for(int j=0;j<array.size()-i*2-1;j++){
down_move=true;
x+=dir[0][1];
y+=dir[1][1];
res.push_back(array[x][y]);
}
if(down_move){
for(int j=0;j<array[0].size()-i*2-1;j++){
x+=dir[0][2];
y+=dir[1][2];
res.push_back(array[x][y]);
}
}
if(right_move){
for(int j=0;j<(int)(array.size())-i*2-2;j++){
x+=dir[0][3];
y+=dir[1][3];
res.push_back(array[x][y]);
}
}
}
return res;
}
};
总结:
注意边界条件的判定。
官方题解给出了模拟和按层遍历两种解法。模拟直接确定结果数组中的元素在二维数组中的位置。按层遍历直接设立上下左右的边界。