class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
int minX,minY,maxX,maxY,x,y;
vector<int> ret;
if(matrix.size()==0)
return ret;
minX=minY=0;
maxX=matrix.size()-1;
maxY=matrix[0].size()-1;
for(;minX<=maxX&&minY<=maxY;minX++,maxX--,minY++,maxY--)
{
x=minX;
y=minY;
ret.push_back(matrix[x][y]);
if(minX==maxX)
{
for(y+=1;y<=maxY;y++)
{
ret.push_back(matrix[x][y]);
}
break;
}
if(minY==maxY)
{
for(x+=1;x<=maxX;x++)
{
ret.push_back(matrix[x][y]);
}
break;
}
for(y+=1;y<=maxY;y++)
{
ret.push_back(matrix[x][y]);
if(y==maxY)
break;
}
for(x+=1;x<=maxX;x++)
{
ret.push_back(matrix[x][y]);
if(x==maxX)
break;
}
for(y-=1;y>=minY;y--)
{
ret.push_back(matrix[x][y]);
if(y==minY)
break;
}
for(x-=1;x>minX;x--)
{
ret.push_back(matrix[x][y]);
if(x==minX+1)
break;
}
}
return ret;
}
};
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
int minX,minY,maxX,maxY,x,y;
vector<int> ret;
if(matrix.size()==0)
return ret;
minX=minY=0;
maxX=matrix.size()-1;
maxY=matrix[0].size()-1;
for(;minX<=maxX&&minY<=maxY;minX++,maxX--,minY++,maxY--)
{
x=minX;
y=minY;
ret.push_back(matrix[x][y]);
if(minX==maxX)
{
for(y+=1;y<=maxY;y++)
{
ret.push_back(matrix[x][y]);
}
break;
}
if(minY==maxY)
{
for(x+=1;x<=maxX;x++)
{
ret.push_back(matrix[x][y]);
}
break;
}
for(y+=1;y<=maxY;y++)
{
ret.push_back(matrix[x][y]);
if(y==maxY)
break;
}
for(x+=1;x<=maxX;x++)
{
ret.push_back(matrix[x][y]);
if(x==maxX)
break;
}
for(y-=1;y>=minY;y--)
{
ret.push_back(matrix[x][y]);
if(y==minY)
break;
}
for(x-=1;x>minX;x--)
{
ret.push_back(matrix[x][y]);
if(x==minX+1)
break;
}
}
return ret;
}
};