File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ // n: height of matrix, m: width of matrix
2
+ // Time complexity: O(n*m)
3
+ // Space complexity: O(n+m)
4
+
5
+ /**
6
+ * @param {number[][] } matrix
7
+ * @return {number[] }
8
+ */
9
+ var spiralOrder = function ( matrix ) {
10
+ const n = matrix . length ;
11
+ const m = matrix [ 0 ] . length ;
12
+
13
+ // order of direction: East, South, West, North
14
+ const dy = [ 0 , 1 , 0 , - 1 ] ;
15
+ const dx = [ 1 , 0 , - 1 , 0 ] ;
16
+
17
+ let dir = 0 ;
18
+ let y = 0 ;
19
+ let x = 0 ;
20
+
21
+ const answer = [ ] ;
22
+
23
+ while ( true ) {
24
+ answer . push ( matrix [ y ] [ x ] ) ;
25
+ matrix [ y ] [ x ] = "" ;
26
+
27
+ let ny = y + dy [ dir ] ;
28
+ let nx = x + dx [ dir ] ;
29
+
30
+ if ( ny >= 0 && ny < n && nx >= 0 && nx < m && matrix [ ny ] [ nx ] !== "" ) {
31
+ y = ny ;
32
+ x = nx ;
33
+ continue ;
34
+ }
35
+
36
+ // If the new position is out of bounds or already visited, Change direction
37
+ dir = ( dir + 1 ) % 4 ;
38
+
39
+ ny = y + dy [ dir ] ;
40
+ nx = x + dx [ dir ] ;
41
+
42
+ // If the changed direction still has a problem, Break the loop
43
+ if ( ny < 0 || ny >= n || nx < 0 || nx >= m || matrix [ ny ] [ nx ] === "" ) {
44
+ break ;
45
+ }
46
+
47
+ y = ny ;
48
+ x = nx ;
49
+ }
50
+
51
+ return answer ;
52
+ } ;
You can’t perform that action at this time.
0 commit comments