1
-
2
- const int dir[4 ][2 ] = {0 , 1 , 1 , 0 , 0 , -1 , -1 , 0 }; // right, down, left, up
3
-
4
1
class Solution {
5
2
public:
6
- vector<int > spiralOrder (vector<vector<int > > &matrix) {
7
- // Start typing your C/C++ solution below
8
- // DO NOT write int main() function
9
-
10
- int M = matrix.size ();
11
- if (M == 0 ) return vector<int >();
12
- int N = matrix[0 ].size ();
13
- if (N == 0 ) return vector<int >();
14
-
15
- vector<int > result (M * N, 0 );
16
- int x = 0 , y = -1 ;
17
- int row = M, col = N + 1 ;
18
- bool go_horizon = true ;
19
- int i = 0 , k = 0 ;
20
- while (i < M * N) {
3
+ vector<int > spiralOrder (vector<vector<int > > &matrix) {
4
+ vector<int > result;
5
+ if (matrix.empty ()) {
6
+ return result;
7
+ }
8
+ int row = matrix.size ();
9
+ int col = matrix[0 ].size () + 1 ;
10
+ int dir[4 ][2 ] = {0 , 1 , 1 , 0 , 0 , -1 , -1 , 0 };
11
+ int x = 0 ;
12
+ int y = -1 ;
13
+ int k = 0 ;
14
+ int count = 0 ;
15
+ bool horizon = true ;
16
+ while (count < matrix.size () * matrix[0 ].size ()) {
21
17
int dx = dir[k%4 ][0 ];
22
18
int dy = dir[k%4 ][1 ];
23
- k += 1 ;
19
+ k++ ;
24
20
25
- if (go_horizon ) {
26
- go_horizon = false ;
27
- col -= 1 ;
28
- for (int j = 0 ; j < col; j ++, i ++) {
21
+ if (horizon ) {
22
+ horizon = false ;
23
+ col-- ;
24
+ for (int i = 0 ; i < col; i ++, count ++) {
29
25
x += dx;
30
26
y += dy;
31
- result[i] = matrix[x][y];
27
+ result. push_back ( matrix[x][y]) ;
32
28
}
33
- }
34
- else {
35
- go_horizon = true ;
36
- row -= 1 ;
37
- for (int j = 0 ; j < row; j++, i++) {
29
+ } else {
30
+ horizon = true ;
31
+ row--;
32
+ for (int i = 0 ; i < row; i++, count++) {
38
33
x += dx;
39
34
y += dy;
40
- result[i] = matrix[x][y];
35
+ result. push_back ( matrix[x][y]) ;
41
36
}
42
37
}
43
38
}
44
39
return result;
45
- }
46
- };
40
+ }
41
+ };
0 commit comments