螺旋矩阵
给定一个正整数 n,生成一个包含 1 到 n 2 n^2 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
def generateMatrix(n):
def rotation(matrix):
return tuple(zip(*matrix[::-1]))
def iterate(r, n):
if n == 1:
return r
else:
new = tuple(range(n - len(r), n))
rot = rotation(r)
return iterate((new,) + rot, n - len(r))
return iterate([(n**2,)], n**2)
可以找一张白纸,在纸中心写一个 9。然后把纸向右旋转 90 度,在 9 的头顶写上 8,然后再转。这时你应该可以看到从左到右的 9 8(请忽略数字的朝向,或者你用扑克牌,手动调整方向),在它们头顶从左到右写上 6 7,然后再旋转纸张……直到遇到 1 为止。
这就是程序实现的过程:右旋,顶部添加一行 [n - len(r), n)
的序列,n = 1 为止。
通过这个模拟过程,我觉得存在一个数学规律:
1
+
(
1
+
2
)
+
(
2
+
3
)
+
.
.
.
+
(
n
−
1
+
n
)
=
n
2
1 + (1 + 2) + (2 + 3) + ... + (n-1 + n) = n^2
1+(1+2)+(2+3)+...+(n−1+n)=n2