leetcode 54. Spiral Matrix (矩阵蛇形取数)
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
思路:。。。再次让我回想起高一的暑假。。。。
1/* ***********************************************
2Author :111qqz
3Created Time :2017年04月11日 星期二 19时42分05秒
4File Name :54.cpp
5************************************************ */
6class Solution {
7public:
8 int n,m; //0右,1下,2左,3上
9 int cal( int &x,int &y,int dir,vector<vector<bool> > & vis)
10 {
11 if (dir==0)
12 {
13 if (y<=n-2&&!vis[x][y+1]) y++;
14 else
15 {
16 dir++;
17 x++;
18 }
19 return dir;
20 }
21 if (dir==1)
22 {
23 if (x<=m-2&&!vis[x+1][y]) x++;
24 else
25 {
26 dir++;
27 y--;
28 }
29 return dir;
30 }
31 if (dir==2)
32 {
33 if (y>=1&&!vis[x][y-1]) y--;
34 else
35 {
36 dir++;
37 x--;
38 }
39 return dir;
40 }
41 if (dir==3)
42 {
43 if (x>=1&&!vis[x-1][y]) x--;
44 else
45 {
46 dir = 0 ;
47 y++;
48 }
49 return dir;
50 }
51 }
52 vector<int> spiralOrder(vector<vector<int>>& matrix) {
53 vector<int>res;
54 m = matrix.size();
55 if (m==0) return res;
56 n = matrix[0].size();
57 if (n==0) return res;
58 vector<vector<bool> >vis(m,vector<bool>(n,false));
59 int x,y,dir;
60 x = y = dir = 0 ;
61 for ( int i = 0 ; i < n*m ; i++)
62 {
63 printf("x:%d y:%d\n",x,y);
64 res.push_back(matrix[x][y]);
65 vis[x][y] = true;
66 dir = cal(x,y,dir,vis);
67 }
68 return res;
69 }
70};