帮朋友做的一题,随便写一下题解。
题目意思很清楚,就是让你螺旋地去遍历二维数组。
这样
思路: 斜着来分组,然后用一个vector记录一下每一个分组。再用一个flag来判断要不要逆序之后存在答案数组里面。那么我们就可以从第一行可以取每个数进行左下的遍历,再取最后一排第2个(因为第一个取过了),同样进行左下遍历这样就可以覆盖全部的数据。
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& a) {
int i=0;
vector<int> v;
int li=a.size();
int wi=a[0].size();
int flag=1;
vector<int> vv;
if(li==1){
return a[0];
}
for(int j=0;j<wi;j++){
vv.clear();
int jj=j;
i=0;
vv.push_back(a[i][jj]);
while(i<li-1&&jj>=0){
i++;
jj--;
if(i<li&jj>=0){
vv.push_back(a[i][jj]);
}
}
if(flag==0){
v.insert(v.end(),vv.begin(),vv.end());
}
else{
reverse(vv.begin(),vv.end());
v.insert(v.end(),vv.begin(),vv.end());
}
flag=(flag+1)%2;
}
int j=wi-1;
for(int i=1;i<li;i++){
vv.clear();
int ii=i;
j=wi-1;
vv.push_back(a[ii][j]);
while(ii<li-1&j>=0){
j--;
ii++;
if(ii<=li-1&j>=0){
vv.push_back(a[ii][j]);
}
}
if(flag==0){
v.insert(v.end(),vv.begin(),vv.end());
}
else {
reverse(vv.begin(),vv.end());
v.insert(v.end(),vv.begin(),vv.end());
}
flag=(flag+1)%2;
}
return v;
}
};