简单的宏观分解,只不过我前几次试都错了,因为print我想要很完美,四个for都是=和<,后来发现了如果x1==x2的时候左到右和右到左其实重复了,而且如果只有一个节点的时候,四个for全都不会进,所以就写成了下面这种并不完美的格式。但是是对的。
#include#include using namespace std; vector ret; void print(const vector >&a, int x1, int y1, int x2, int y2) { for(int j=y1; j<=y2; ++j) ret.push_back(a[x1][j]); for(int i=x1+1; i =y1; --j) ret.push_back(a[x2][j]); if(y1!=y2) for(int i=x2; i>x1; --i) ret.push_back(a[i][y1]); } vector spiralOrder(const vector >& matrix) { if(matrix.empty()) return ret; int x1=0, y1=0, x2=matrix.size()-1, y2=matrix[0].size()-1; for(;x1<=x2 && y1<=y2;++x1, ++y1, --x2, --y2) print(matrix,x1,y1,x2,y2); return ret; } int main(void) { vector c={6,9,7}; vector >d; d.push_back(c); spiralOrder(d); return 0; }



