中文english
給出整數n
, 返回乙個大小為n * n
的螺旋矩陣
樣例 1:
輸入 : n = 3
輸出 :
[[1,2,3]
[8,9,4]
[7,6,5]
]
樣例 2:
輸入 : n = 5
輸出 :
[ [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]
]
classsolution:
'''大致思路:
1.給出初始值dic=[[0,0,0],...],p=r,x=0,y=0
2.有4個臨界值,這4個臨界值會隨著走的過程發生變化。分別為x_l,x_r,y_u,y_d,值分別是0,n-1,1,n-1 (特別注意,有乙個臨界值y_u=1,因為最開始從[0][0
]出發,佔了一位)
2.p為走的方向,r,d,l,u。如果p==r的時候,x不變,y+1,直到y==臨界值時候(此時需要轉換方向),p賦值為d。其他一樣按此情況賦值,和走
3.然後最後的時候對dic賦值dic[x][y]=num,返回
注意:x_l,x_r,y_u,y_d分別為x軸左右臨界值,y軸上下臨界值。r,d,l,u分別代表走的方向為右,下,左,上。
'''def spiralarray(self,n):
##初始化
dic,p,x,y=,'
r',0,0
#特別注意對dic的初始化,早先開始就知道有列表的長度,所以都已經賦好了初始值0,每走一步就賦新值。
for i in
range(n):
0]*n)
#給定初始臨界x和臨界y,每次走到臨界,臨界x和臨界y都會發生變化(注意,y_u初始為1,因為開始的位置從[
0][0
]開始,本身就佔了一位,所以往上臨界值應該為1就停)
x_l,x_r,y_u,y_d = 0,n-1,1,n-1
for num in range(1,n*n+1
): dic[x][y]=num
#向右邊走,x不變,y+1
if p == '
r' and y y += 1
#如果到臨界值的話,p改變方向
if y ==x_r:
x_r = x_r - 1
p = 'd'
elif p == '
d' and x x += 1
if x ==y_d:
y_d = y_d - 1
p = 'l'
elif p == '
l' and y >x_l:
y -= 1
if y ==x_l:
x_l = x_l + 1
p = 'u'
elif p == '
u' and x >y_u:
x -= 1
if x ==y_u:
y_u = y_u + 1
p = 'r'
return dic
螺旋方針(螺旋矩陣)
螺旋方陣 time limit 1000ms memory limit 65536kb problem description 的螺旋方陣當n 5和n 3時分別是如下的形式 請給出乙個程式,對於任意的輸入 0 11 輸出按照上面規律所獲得的 的螺旋方陣。input 輸入第一行為整數 0 10 代表有...
螺旋矩陣 蛇形矩陣
問題描述 給定乙個包含m行n列的m x n矩陣,程式設計按照螺旋順序,輸出該矩陣中的所有元素。輸入有多個矩陣。每個矩陣資料的第1行有兩個整數m和n,接著是乙個mxn矩陣的描述,有m行,每行有n個整數 輸出對每個矩陣資料,按照螺旋順序輸出矩陣陣列的元素。輸入樣例 3 31 2 3 4 5 6 7 8 ...
列印螺旋矩陣
首先,看一下螺旋矩陣的樣子.如下圖 求螺旋陣列的 如下 dev cpp平台 include using namespace std int alloc mat int round 動態二維陣列的分配 void del mat int mat,int round 刪除動態分配的二維陣列 void pr...