给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
采用旋转的方式,按照路径进行判断,从外层逐渐往内走。注意如果矩阵列数为1,那么初始方向应该是向下的。
1 class Solution { 2 public: 3 vector<int> spiralOrder(vector<vector<int>>& matrix) { 4 int m=matrix.size(); 5 if(!m) return {}; 6 int n=matrix[0].size(); 7 int left=0,right=n-1,up=0,down=m-1; 8 int x=0,y=0; 9 vector<int> ret; 10 int direction; 11 direction=n==1?1:0; 12 while(ret.size()!=m*n){ 13 ret.push_back(matrix[x][y]); 14 switch(direction){ 15 case 0: 16 y++; 17 if(y==right) 18 direction=1; 19 break; 20 case 1: 21 x++; 22 if(x==down) 23 direction=2; 24 break; 25 case 2: 26 y--; 27 if(y==left) 28 direction=3; 29 break; 30 case 3: 31 x--; 32 if(x==up+1){ 33 left++; 34 up++; 35 right--; 36 down--; 37 } 38 if(x==up) 39 direction=0; 40 break; 41 } 42 43 44 } 45 return ret; 46 } 47 };