0054-spiral-matrix¶
Try it on leetcode
Description¶
Given an m x n matrix, return all elements of the matrix in spiral order.
Example 1:
Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] Output: [1,2,3,6,9,8,7,4,5]
Example 2:
Input: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] Output: [1,2,3,4,8,12,11,10,9,5,6,7]
Constraints:
m == matrix.lengthn == matrix[i].length1 <= m, n <= 10-100 <= matrix[i][j] <= 100
Solution(Python)¶
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
# matrix = [[1,2,3],[4,5,6],[7,8,9]]
# Output: [1,2,3,6,9,8,7,4,5]
#
# spiral = []
#
# l -> r 1 2 3
# u -> d 6 9 8
# r -> l 7
# d -> u 4
# l -> r 5
#
# l -> r u -> d
# r -> l d -> u
#
# l = 0, r=n-1
# u = 0, d = m -1
#
# len(spiral) = m*n
# i = 0 j= 0 -> r = n-1
#
# len(res) < m*n:
# i -> r
# j -> d
# if u != d
# i -> l
# if l != r
# j -> u
# update r,d,l,u
spiral = []
m,n = len(matrix), len(matrix[0])
left = 0
right = n - 1
up = 0
down = m - 1
while len(spiral) < m * n: # matrix = [[1,2,3],[4,5,6],[7,8,9]] l =1 r = 2, u = 1 , d = 2
for j in range(left , right + 1): # 1 2 3
spiral.append(matrix[up][j]) # res = [0 1 2 ]
for i in range(up + 1, down + 1): # 6 9
spiral.append(matrix[i][right]) # res = [0 1 2 6 ]
if up != down: # 0!=3
for j in range(right - 1 , left - 1, - 1): # 87
spiral.append(matrix[down ][j]) # res = [0 1 2 6 9 8]
if right != left: # 0!=3
for i in range(down - 1 , up, -1): # 2 1
spiral.append(matrix[i][left]) # res = [0 1 2 6 9 8 7 4 5]
left += 1 # l = 1
right -= 1 # r = 2
up += 1 # u = 1
down -= 1 # d = 2
return spiral