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]
.
Being careful is the only princeple.
Solution:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(matrix.empty())
return vector<int>();
vector<int> result;
int border[]={1,matrix[0].size()-1,matrix.size()-1,0};
int dir[][2]={{0,1},{1,0},{0,-1},{-1,0}};
int x=0,y=0;
int index=0;
int count=0,total=matrix.size()*matrix[0].size();
while(count++<total){
result.push_back(matrix[x][y]);
if(dir[index][1]!=0&&y==border[2-dir[index][1]]){
border[2-dir[index][1]]-=dir[index][1];
++index;
index%=4;
}else if(dir[index][0]!=0&&x==border[1+dir[index][0]]){
border[1+dir[index][0]]-=dir[index][0];
++index;
index%=4;
}
x+=dir[index][0];
y+=dir[index][1];
}
return result;
}
};