File tree Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @link https://leetcode.com/problems/spiral-matrix/description/
3
+ *
4
+ * 접근 방법 :
5
+ * - right -> bottom -> left -> top 순서로 진행하면서 경계 업데이트 처리
6
+ *
7
+ * 시간복잡도 : O(m x n)
8
+ * - m x n 행렬의 모든 숫자 방문하니까 O(m x n)
9
+ *
10
+ * 공간복잡도 : O(n)
11
+ * - 숫자 길이만큼 배열에 담음 *
12
+ */
13
+
14
+ function spiralOrder ( matrix : number [ ] [ ] ) : number [ ] {
15
+ const result : number [ ] = [ ] ;
16
+ // 경계 설정
17
+ let top = 0 ,
18
+ bottom = matrix . length - 1 ,
19
+ left = 0 ,
20
+ right = matrix [ 0 ] . length - 1 ;
21
+
22
+ const moveRight = ( ) => {
23
+ for ( let i = left ; i <= right ; i ++ ) {
24
+ result . push ( matrix [ top ] [ i ] ) ;
25
+ }
26
+ top ++ ;
27
+ } ;
28
+
29
+ const moveDown = ( ) => {
30
+ for ( let i = top ; i <= bottom ; i ++ ) {
31
+ result . push ( matrix [ i ] [ right ] ) ;
32
+ }
33
+ right -- ;
34
+ } ;
35
+
36
+ const moveLeft = ( ) => {
37
+ for ( let i = right ; i >= left ; i -- ) {
38
+ result . push ( matrix [ bottom ] [ i ] ) ;
39
+ }
40
+ bottom -- ;
41
+ } ;
42
+
43
+ const moveUp = ( ) => {
44
+ for ( let i = bottom ; i >= top ; i -- ) {
45
+ result . push ( matrix [ i ] [ left ] ) ;
46
+ }
47
+ left ++ ;
48
+ } ;
49
+
50
+ while ( top <= bottom && left <= right ) {
51
+ moveRight ( ) ;
52
+ moveDown ( ) ;
53
+
54
+ if ( top <= bottom ) moveLeft ( ) ;
55
+ if ( left <= right ) moveUp ( ) ;
56
+ }
57
+
58
+ return result ;
59
+ }
You can’t perform that action at this time.
0 commit comments