震惊某程序员竟然这样实现了螺旋数组
要求:
输入样例:
4
输出样例:
10 | 9 | 8 | 7 |
---|---|---|---|
11 | 2 | 1 | 6 |
12 | 3 | 4 | 5 |
13 | 14 | 15 | 16 |
思路:
-
事先定义的一个基础的2的矩阵
-
n=2时的矩阵
-
-
n=3时的矩阵
-
-
通过对比 我们可以发现 n=3时 只需要补充一行 和剩下两列的两个数
-
n=4时的矩阵
-
-
通过和上面n=3的矩阵相比 n=4时 只需要补充最下面一列和然后对每个列表插入一个数
-
最后,根据输入的n,用循环来确定补全的次数
代码如下:
def jishu(l, n): #奇数情况下
a = []
lineMax = n * n # 计算出最大值
for i in range(n): # 生成奇数的第一列
a.append(lineMax)
lineMax -= 1
l.insert(0, a) # 插入到之前的列表中
for i in range(1, len(l)): #补全剩余的数
l[i].append(lineMax)
lineMax -= 1
return l
def oushu(l, n): # 偶数情况下
a = []
lineMax = n * n
for i in range(n): # 补全最后一列
a.append(lineMax)
lineMax -= 1
l.append(a[::-1])
for i in range(len(l) - 2, -1, -1): # 补全剩下的数
l[i].insert(0, lineMax)
lineMax -= 1
return l
if __name__ == '__main__':
n = int(input())
l = [[2, 1], [3, 4]] # 事先定义的一个基础的2的列表
if n >= 3:
for i in range(3, n + 1):
if i % 2 == 1:
l = jishu(l, i)
if i % 2 == 0:
l = oushu(l, i)
for i in l:
for j in i:
print('%-4d' % j, end=" ")
print()
'''