Skip to content

Commit b64d18b

Browse files
committed
Add spiral-matrix solution
1 parent 50b3ab9 commit b64d18b

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

spiral-matrix/Jeehay28.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// Time Complexity: O(m * n), where m is the number of rows and n is the number of columns in the matrix,
2+
// because every element is processed once.
3+
4+
// Space Complexity: O(m * n), where m is the number of rows and n is the number of columns in the matrix,
5+
// because we store all matrix elements in the result array.
6+
7+
/**
8+
* @param {number[][]} matrix
9+
* @return {number[]}
10+
*/
11+
var spiralOrder = function (matrix) {
12+
13+
let topRow = 0;
14+
let bottomRow = matrix.length - 1;
15+
let leftCol = 0;
16+
let rightCol = matrix[0].length - 1;
17+
let result = [];
18+
19+
while (topRow <= bottomRow && leftCol <= rightCol) {
20+
// move to the right
21+
for (let col = leftCol; col <= rightCol; col++) {
22+
result.push(matrix[topRow][col]);
23+
}
24+
25+
topRow += 1;
26+
27+
if (topRow > bottomRow) {
28+
break;
29+
}
30+
31+
// move down
32+
for (let row = topRow; row <= bottomRow; row++) {
33+
result.push(matrix[row][rightCol]);
34+
}
35+
36+
rightCol -= 1;
37+
38+
if (leftCol > rightCol) {
39+
break;
40+
}
41+
42+
// move to the left
43+
for (let col = rightCol; col >= leftCol; col--) {
44+
result.push(matrix[bottomRow][col]);
45+
}
46+
47+
bottomRow -= 1;
48+
if (topRow > bottomRow) {
49+
break;
50+
}
51+
52+
// move up
53+
for (let row = bottomRow; row >= topRow; row--) {
54+
result.push(matrix[row][leftCol]);
55+
}
56+
57+
leftCol += 1;
58+
59+
if (leftCol > rightCol) {
60+
break;
61+
}
62+
}
63+
64+
return result;
65+
};
66+

0 commit comments

Comments
 (0)