Implementing a function that returns a n x m matrix in counter-clockwise spiral order starting from at the bottom right entry of the matrix

Question:

So I’m trying to implement a function in python that returns all elements of a n x m matrix in counter-clockwise spiral order, starting at the bottom furthest-right entry of the matrix.

For example, let’s say the input was:

matrix = [[1,2,3],
          [4,5,6],
          [7,8,9]] 

Then our output would be [9, 6, 3, 2, 1, 4, 7, 8, 5]

In another case, if the

matrix = [[1,2],
          [3,4],
          [5,6]]

Then our output would be [6, 4, 2, 1, 3, 5]

And finally, if the matrix = [3], we’d return [3].

The function I’m implementing follows this header:

def spiralOrder(matrix: list[list[int]]) -> list[int]:

Answers:

You could consider using a while-loop:

def spiralOrder(self, matrix: list[list[int]]) -> list[int]:
    result = []
    left, right = 0, len(matrix[0]) - 1
    up, down = 0, len(matrix) - 1
    step = 0
    while left <= right and up <= down:
        match step % 4:
            case 0:
                for i in range(down, up - 1, -1):
                    result.append(matrix[i][right])
                right -= 1
            case 1:
                for i in range(right, left - 1, -1):
                    result.append(matrix[up][i])
                up += 1
            case 2:
                for i in range(up, down + 1):
                    result.append(matrix[i][left])
                left += 1
            case 3:
                for i in range(left, right + 1):
                    result.append(matrix[down][i])
                down -= 1
        step += 1
    return result

Example Usage 1:

print(spiralOrder([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
[9, 6, 3, 2, 1, 4, 7, 8, 5]

Example Usage 2:

print(spiralOrder([[1, 2], [3, 4], [5, 6]])
[6, 4, 2, 1, 3, 5]

Example Usage 3:

print(spiralOrder([[3]])
[3]

Note: [3] is a not of the type list[list[int]] hence I am assuming it is a typo in your question.

Answered By: Sash Sinha
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.