给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
面试频率较高
1. 先定义一个空矩阵
2. startx表示行起始 starty表示列起始
3. 左闭右开原则,从左到右,从上到下,从右到左,从下到上开始循环赋值,一共是四个循环
4. 注意偶数和奇数,奇数需要给中心值赋值
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
nums = [ [0]*n for _ in range(n)]
startx, starty = 0,0 // startx表示行 starty表示列
loop, mid = n // 2, n // 2
count = 1
for offset in range(1, loop + 1):
for i in range(starty,n - offset):
nums[startx][i] = count
count += 1
for i in range(startx,n - offset):
nums[i][n - offset] = count
count += 1
for i in range(n - offset,starty,-1):
nums[n - offset][i] = count
count += 1
for i in range(n - offset,startx,-1):
nums[i][starty] = count
count += 1
startx += 1
starty += 1
if n % 2 != 0:
nums[mid][mid] = count
return nums