769 螺旋矩陣 經典

2022-02-15 03:42:44 字數 1669 閱讀 7084

中文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]

]

class

solution:

'''大致思路:

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...