spiralOrder(matrix) that takes in a 2D matrix as input and returns an array of the matrix elements in spiral order.Spiral order refers to the order in which the elements of a 2D matrix are traversed in a spiral pattern, starting from the top-left corner and moving towards the right, then downwards, then towards the left, and finally upwards. The pattern is repeated until all elements in the matrix have been traversed. So, the traversal follows a spiral pattern resembling a spiral shape, hence the name spiral order.
Let's say we have the following 2D matrix:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
To traverse this matrix in spiral order, we start at the top left corner and visit each element in a clockwise spiral pattern, so the order of traversal would be:
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10We start at 1, then move right to 2, 3, and 4. Then, we move down to 8, 12, 16, and then left to 15, 14, 13. Next, we move up to 9, 5, and 6, then right to 7 and finally, down to 11 and 10 to complete the traversal.
function spiralOrder(matrix) {
const result = [];
if (matrix.length === 0) {
return result;
}
// define boundaries
let top = 0, bottom = matrix.length - 1, left = 0, right = matrix[0].length - 1;
while (top <= bottom && left <= right) {
// traverse top row from left to right
for (let i = left; i <= right; i++) {
result.push(matrix[top][i]);
}
top++;
// traverse right column from top to bottom
for (let i = top; i <= bottom; i++) {
result.push(matrix[i][right]);
}
right--;
// traverse bottom row from right to left
if (top <= bottom) {
for (let i = right; i >= left; i--) {
result.push(matrix[bottom][i]);
}
bottom--;
}
// traverse left column from bottom to top
if (left <= right) {
for (let i = bottom; i >= top; i--) {
result.push(matrix[i][left]);
}
left++;
}
}
return result;
}result that will hold all the matrix elements in spiral order. Then we will check for the edge case of an empty matrix, in which case we return an empty result array.After that, we will define the boundaries of the matrix using four variables top, bottom, left, and right. top will initially be 0, bottom will initially be the last row of the matrix, left will initially be 0, and right will initially be the last column of the matrix.Next, we will use a while loop to traverse the matrix in spiral order. We will do this as long as top is less than or equal to bottom and left is less than or equal to right. Within the while loop, we will perform the following four steps in order:result. Increase top by 1.result. Decrease right by 1.result. Decrease bottom by 1.result. Increase left by 1.result in spiral order.Finally, we return the result array containing all the matrix elements in spiral order.Big O Complexity Analysis:
The time complexity of this solution is O(mn), where m is the number of rows and n is the number of columns in the matrix. This is because we need to traverse every element in the matrix to add it to result in spiral order.The space complexity of this solution is O(mn), where m is the number of rows and n is the number of columns in the matrix. This is because we need to store all the elements in the matrix in the result array.