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]
.
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.size()==0) return vector<int>();
int rowBegin=0,rowEnd=matrix.size()-1;
int colBegin=0,colEnd=matrix[0].size()-1;
vector<int> res(matrix.size()*matrix[0].size());
int k=0;
while(rowBegin<=rowEnd&&colBegin<=colEnd){
for(int i=colBegin;i<=colEnd;i++) res[k++]=matrix[rowBegin][i];
rowBegin++;
for(int i=rowBegin;i<=rowEnd;i++) res[k++]=matrix[i][colEnd];
colEnd--;
//最后两个if判断是为了防止重复
if(rowBegin<=rowEnd){//<=
for(int i=colEnd;i>=colBegin;i--) res[k++]=matrix[rowEnd][i];
rowEnd--;
}
if(colBegin<=colEnd){
for(int i=rowEnd;i>=rowBegin;i--) res[k++]=matrix[i][colBegin];
colBegin++;
}
}
return res;
}
};