LeetCode54:螺旋矩阵

给定一个包含 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 };

猜你喜欢

转载自www.cnblogs.com/rookiez/p/13210981.html