spiral matrix

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]

You should return [1,2,3,6,9,8,7,4,5].

vector<int> spiralOrder(vector<vector<int> > &matrix) {
int row = matrix.size();
if(row == 0) return vector<int>();
int column = matrix[0].size();
vector<int>res;
int ux=0, uy=0, dx=row-1, dy=column-1;//设置4个变量
while(ux < dx && uy < dy){//在同一行的话直接解决就好
for(int i=uy; i<dy; i++){
res.push_back(matrix[ux][i]);
}
for(int i=ux; i<dx; i++){
res.push_back(matrix[i][dy]);
}
for(int i=dy; i>uy; i--){
res.push_back(matrix[dx][i]);
}
for(int i=dx; i>ux; i--){
res.push_back(matrix[i][uy]);
}
uy++; dy--;
ux++; dx--;
}
//要用if,else if如果n==m时,ux==dx && uy == dy同时成立
if(ux == dx){
for(int i=uy; i<=dy; i++) res.push_back(matrix[ux][i]);
}
else if(uy == dy){
for(int i=ux; i<=dx; i++) res.push_back(matrix[i][ux]);
}
return res;
}