给你一个正整数
n
,生成一个包含1
到n^2^
所有元素,且元素按顺时针顺序螺旋排列的n x n
正方形矩阵matrix
。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
- 1 <= n <= 20
解1 2021/9/8 O(n2)
def generateMatrix(n: int) -> list:
'''
题目限定,是nxn的
1 -> 2 -> 3
↓
8 -> 9 4
↑ ↓
7 <- 6 <- 5
这题和54题区别不大,把矩阵先创建好,往里填就行了
拿过来,改吧改吧
→ ↓ ← ↑ 循环,直到填完n个数为止
同时更新上下左右四面墙就行了
比如,初始的时候,
zuo=0,you=3,shang=0,xia=2
→完了,shang+=1
↓完了,you-=1
←完了,xia-=1
↑完了,zuo+=1
'''
# 不能这样创建二维数组,id(res[0])=id(res[1]=id(res[2]),一改,三行一起改
#res=[[0]*n]*n
# 也不能用np,类型不一样,一个是numpy.ndarray,一个是list
#res=np.zeros(shape=(n,n),dtype=int)
res=[[0 for hang in range(n)] for lie in range(n)]
zuo=0
you=n-1
shang=0
xia=n-1
i=0
num_nr=n*n
while i<num_nr:
# →
for x in range(zuo,you+1):
res[shang][x]=i+1
i+=1
if i==num_nr: return res
shang+=1
# ↓
for x in range(shang,xia+1):
res[x][you]=i+1
i+=1
if i == num_nr: return res
you-=1
# ←
for x in range(you,zuo-1,-1):
res[xia][x]=i+1
i+=1
if i == num_nr: return res
xia-=1
# ↑
for x in range(xia,shang-1,-1):
res[x][zuo]=i+1
i+=1
if i == num_nr: return res
zuo+=1
return res
if __name__ == '__main__':
print(generateMatrix(3))
print(generateMatrix(1))
print(generateMatrix(2))
print(generateMatrix(10))
print(type(generateMatrix(10)))
print(type([[1, 2, 3], [8, 9, 4], [7, 6, 5]]))
print([[1, 2, 3], [8, 9, 4], [7, 6, 5]]==generateMatrix(3))