Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
Example:
Input: 3 Output: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
LeetCode:链接
和LeetCode54:Spiral Matrix做法一样。得先创建一个为0的矩阵,然后改变值。
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
# 必须先创建一个都为0的矩阵 然后再重新赋值
matrix = [[0 for i in range(n)] for j in range(n)]
maxUp, maxLeft = 0, 0
maxDown, maxRight = len(matrix)-1, len(matrix[0])-1
# 从1开始赋值
index = 1
direction = 0
while True:
if direction == 0:
for i in range(maxLeft, maxRight+1):
matrix[maxUp][i] = index
index += 1
maxUp += 1
elif direction == 1:
for i in range(maxUp, maxDown+1):
matrix[i][maxRight] = index
index += 1
maxRight -= 1
elif direction == 2:
for i in range(maxRight, maxLeft-1, -1):
matrix[maxDown][i] = index
index += 1
maxDown -= 1
else:
for i in range(maxDown, maxUp-1, -1):
matrix[i][maxLeft] = index
index += 1
maxLeft += 1
if maxUp > maxDown or maxLeft > maxRight:
return matrix
direction = (direction + 1) % 4