class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> res;
if (matrix.size()==0) return res;
int sx=0, sy=0, ex=matrix[0].size()-1, ey=matrix.size()-1;
while (true) {
for (int i=sx; i<=ex; i++) {
res.push_back(matrix[sy][i]);
}
if (++sy>ey) break;
for (int i=sy; i<=ey; i++) {
res.push_back(matrix[i][ex]);
}
if (--ex<sx) break;
for (int i=ex; i>=sx; i--) {
res.push_back(matrix[ey][i]);
}
if (--ey<sy) break;
for (int i=ey; i>=sy; i--) {
res.push_back(matrix[i][sx]);
}
if (++sx>ex) break;
}
return res;
}
};
II:
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
vector<int> t(n,0);
vector<vector<int> > res(n,t);
int sx=0, ex=n-1, sy=0, ey=n-1;
int m=1;
while (1) {
for (int i=sx; i<=ex; i++) {
res[sy][i]=m;
m++;
}
if (++sy>ey) break;
for (int i=sy; i<=ey; i++) {
res[i][ex]=m;
m++;
}
if (--ex<sx) break;
for (int i=ex; i>=sx; i--) {
res[ey][i]=m;
m++;
}
if (--ey<ex) break;
for (int i=ey; i>=sy; i--) {
res[i][sx]=m;
m++;
}
if (++sx>sy) break;
}
return res;
}
};