题目
给你一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
解题思路:
思路:坚持循环不变量原则(区间的开闭性保持不变)
模拟顺时针画矩阵的过程(由外向内):
填充上行从左到右
填充右列从上到下
填充下行从右到左
填充左列从下到上
按照左闭右开原则填充矩阵:
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
matrix = [[0] * n for _ in range(n)]
left, right, up, down = 0, n-1, 0, n-1
number = 1
while left < right and up < down:
# 从左往右
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
left, right, up, down = left+1, right-1, up+1, down-1
# 如果阶数为奇数,额外填充中心
if n % 2:
matrix[n//2][n//2] = number
return matrix