From LeetCode 59. Spiral Matrix II
Description
Given a positive integer n
, generate an n x n
matrix
filled with elements from 1
to n2
in spiral order.
Solution
Credit to Programmercarl
def generateMatrix(self, n: int) -> List[List[int]]:
# initial a matrix
matrix = [[0] * n for _ in range(n)]
left, right, up, down = 0, n - 1, 0, n - 1
number = 1 # number we need to fill 要填充的数字
while left < right and up < down:
# 从左到右填充上边 from left to right, fill up part
for x in range(left, right):
matrix[up][x] = number
number += 1
# 从上到下填充右边
for y in range(up, down):
matrix[y][right] = number
number += 1
# 从右到左填充下边
for x in range(right, left, -1):
matrix[down][x] = number
number += 1
# 从下到上填充左边
for y in range(down, up, -1):
matrix[y][left] = number
number += 1
# 缩小要填充的范围 area
left += 1
right -= 1
up += 1
down -= 1
# 如果阶数为奇数,额外填充一次中心 if n is odd number, should fill the center square
if n % 2:
matrix[n // 2][n // 2] = number
return matrix