螺旋矩陣是一道經典的程式題,看到多數的解決方案是用遞迴方法,但是如果對遞迴不熟悉,可能比較難想清楚程式邏輯,下面提供一種常規方法:
首先看題目:
'''
輸入n, 列印 n*n 螺旋矩陣
比如 n = 3,列印:
1 2 3
8 9 4
7 6 5
n = 4,列印:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
'''
這篇文章介紹的方法是找規律,把乙個矩形陣列想象成由乙個具有多個節點的棍子構成,暫且稱為」多截棍「。我們按照螺旋的順序展開,也就是把矩陣變成乙個長為nn,從1排列到nn的列表,寫出每乙個數字對應的索引,可以發現具有以下規律:
number:1 - x:0;y:0
number:2 - x:0;y:1
number:3 - x:0;y:2
number:4 - x:0;y:3
number:5 - x:1;y:3
number:6 - x:2;y:3
number:7 - x:3;y:3
number:8 - x:3;y:2
number:9 - x:3;y:1
number:10 - x:3;y:0
number:11 - x:2;y:0
number:12 - x:1;y:0
number:13 - x:1;y:1
number:14 - x:1;y:2
number:15 - x:2;y:2
number:16 - x:2;y:1
#即x為最小值,y小於最大值時,y加1直到y為最大值,此時x最小值加1;
#y為最大值,x小於最大值時,x加1直到x為最大值,此時y最大值減1;
#x為最大值,y大於最小值時,y減1直到y為最小值,此時x最大值減1;
#y為最小值,x大於最小值時,x減1直到x為最小值,此時y最小值加1.
規律找出來後,直接上**:
def luoxuan(n):
#x,y,maxx,maxy,minx,miny初始化
x = 0
y = 0
maxx = n-1
maxy = n-1
minx = 0
miny = 0
xy_list = [[x,y]]
#n=0 和n=1的特例
if n == 0:return 0
if n == 1:return 1
#開始迴圈
while len(xy_list) < n*n:
if (x == minx) and (yminy):
y-=1
if y == miny:
maxx-=1
elif (x>minx) and (y == miny):
x-= 1
if x == minx:
miny+=1
#print('x:%d;y:%d'%(x,y))
table = [[0]*n for i in range(n)]
for i,b in enumerate(xy_list):
#print(b)
table[b[0]][b[1]] = i+1
print('number:%d - x:%d;y:%d'%(table[b[0]][b[1]],b[0],b[1]))
return table
luoxuan(4)
"'output:
number:1 - x:0;y:0
number:2 - x:0;y:1
number:3 - x:0;y:2
number:4 - x:0;y:3
number:5 - x:0;y:4
number:6 - x:1;y:4
number:7 - x:2;y:4
number:8 - x:3;y:4
number:9 - x:4;y:4
number:10 - x:4;y:3
number:11 - x:4;y:2
number:12 - x:4;y:1
number:13 - x:4;y:0
number:14 - x:3;y:0
number:15 - x:2;y:0
number:16 - x:1;y:0
number:17 - x:1;y:1
number:18 - x:1;y:2
number:19 - x:1;y:3
number:20 - x:2;y:3
number:21 - x:3;y:3
number:22 - x:3;y:2
number:23 - x:3;y:1
number:24 - x:2;y:1
number:25 - x:2;y:2
[[1, 2, 3, 4, 5],
[16, 17, 18, 19, 6],
[15, 24, 25, 20, 7],
[14, 23, 22, 21, 8],
[13, 12, 11, 10, 9]]
螺旋矩陣(python)
首先這類題我覺得不能想著如何去實現這個矩陣在 中,我們只需要用一些規律和代數去實現每個位置的數字即可 n,m int i for i in input split r,c int i for i in input split def abc n,m,i,j if i 1 return j if j ...
列印螺旋矩陣(遞迴解法)
求職過程遇到的一道面試題,當時沒有做出來,回來想出幾種方法,其中大多是 蠻力 解法,不得不陷入一堆的i j 迴圈之中。最後想出一種遞迴解法,現記錄如下。題目如下 輸入 n,列印 n n 螺旋矩陣 比如 n 3 列印 1 2 3 8 9 4 7 6 5 n 4 列印 1 2 3 4 12 13 14 ...
列印螺旋矩陣(遞迴解法)
求職過程遇到的一道面試題,當時沒有做出來,回來想出幾種方法,其中大多是 蠻力 解法,不得不陷入一堆的i j 迴圈之中。最後想出一種遞迴解法,現記錄如下。題目如下 輸入n,列印 n n 螺旋矩陣 比如 n 3,列印 1 2 3 8 9 4 7 6 5 n 4,列印 1 2 3 4 12 13 14 5...