1+ /*
2+ 1.7 Rotate Matrix: Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes,
3+ write a method to rotate the image by 90 degrees. Can you do this in place?
4+ */
5+ function rotateMatrix ( matrix ) {
6+ const n = matrix . length ;
7+
8+ for ( let layer = 0 ; layer < n / 2 ; layer ++ ) {
9+ for ( let offset = 0 ; offset < n - 2 * layer - 1 ; offset ++ ) {
10+ // save top
11+ const t = matrix [ layer ] [ layer + offset ] ;
12+ // move left to top
13+ matrix [ layer ] [ layer + offset ] = matrix [ n - 1 - layer - offset ] [ layer ] ;
14+ // move bottom to left
15+ matrix [ n - 1 - layer - offset ] [ layer ] = matrix [ n - 1 - layer ] [ n - 1 - layer - offset ] ;
16+ // move right to bottom
17+ matrix [ n - 1 - layer ] [ n - 1 - layer - offset ] = matrix [ layer + offset ] [ n - 1 - layer ] ;
18+ // move saved top to right
19+ matrix [ layer + offset ] [ n - 1 - layer ] = t ;
20+ }
21+ }
22+
23+ return matrix ;
24+ } ;
25+
26+ const m1 = [ [ 0 ] ] ;
27+
28+ const m2 = [ [ 1 , 2 ] ,
29+ [ 3 , 4 ] ] ;
30+
31+ const m3 = [ [ 1 , 2 , 3 ] ,
32+ [ 4 , 5 , 6 ] ,
33+ [ 7 , 8 , 9 ] ] ;
34+
35+ const m4 = [ [ 1 , 2 , 3 , 4 ] ,
36+ [ 5 , 6 , 7 , 8 ] ,
37+ [ 9 , 10 , 11 , 12 ] ,
38+ [ 13 , 14 , 15 , 16 ] ] ;
39+
40+ const m5 = [ [ 1 , 2 , 3 , 4 , 5 ] ,
41+ [ 6 , 7 , 8 , 9 , 10 ] ,
42+ [ 11 , 12 , 13 , 14 , 15 ] ,
43+ [ 16 , 17 , 18 , 19 , 20 ] ,
44+ [ 21 , 22 , 23 , 24 , 25 ] ] ;
45+
46+ console . log ( rotateMatrix ( m1 ) ) ; // [ [ 0 ] ]
47+ console . log ( rotateMatrix ( m2 ) ) ; // [ [ 3, 1 ], [ 4, 2 ] ]
48+ console . log ( rotateMatrix ( m3 ) ) ; // [ [ 7, 4, 1 ], [ 8, 5, 2 ], [ 9, 6, 3 ] ]
49+
50+ console . log ( rotateMatrix ( m4 ) ) ;
51+ /*
52+ [ [ 13, 9, 5, 1 ],
53+ [ 14, 10, 6, 2 ],
54+ [ 15, 11, 7, 3 ],
55+ [ 16, 12, 8, 4 ] ]
56+ */
57+
58+ console . log ( rotateMatrix ( m5 ) ) ;
59+ /*
60+ [ [ 21, 16, 11, 6, 1 ],
61+ [ 22, 17, 12, 7, 2 ],
62+ [ 23, 18, 13, 8, 3 ],
63+ [ 24, 19, 14, 9, 4 ],
64+ [ 25, 20, 15, 10, 5 ] ]
65+ */
0 commit comments