螺旋矩陣生成

2021-10-22 08:54:47 字數 2172 閱讀 1180

螺旋矩陣i:按螺旋順序返回矩陣所有元素

可以模擬螺旋矩陣的路徑。初始位置是矩陣的左上角,初始方向是向右,當路徑超出界限或者進入之前訪問過的位置時,順時針旋轉,進入下乙個方向。

判斷路徑是否進入之前訪問過的位置需要使用乙個與輸入矩陣大小相同的輔助矩陣visited,其中的每個元素表示該位置是否被訪問過。當乙個元素被訪問時,將visited 中的對應位置的元素設為已訪問。

如何判斷路徑是否結束?由於矩陣中的每個元素都被訪問一次,因此路徑的長度即為矩陣中的元素數量,當路徑的長度達到矩陣中的元素數量時即為完整路徑,將該路徑返回。

class

solution

:def

spiralorder

(self, matrix: list[list[

int]])

-> list[

int]

: dirs =[(

0,1)

,(1,

0),(

0,-1

),(-

1,0)

] m =

len(matrix)

n =len(matrix[0]

) visited =[[

0]* n for _ in

range

(m)]

res_list =

row, col, diridx =0,

0,0for i in

range

(m * n)

:# 矩陣中的每個元素都被訪問一次

[col]

) visited[row]

[col]=1

dx, dy = dirs[diridx]

r, c = row + dx, col + dy

if r <

0or r >= m or c <

0or c >= n or visited[r]

[c]==1:

diridx =

(diridx +1)

%4# 順時針旋轉至下乙個方向

dx, dy = dirs[diridx]

row, col = row + dx, col + dy

return res_list

螺旋矩陣ii:模擬矩陣的生成

按照要求,初始位置設為矩陣的左上角,初始方向設為向右。若下一步的位置超出矩陣邊界,或者是之前訪問過的位置,則順時針旋轉,進入下乙個方向。如此反覆直至填入n2個元素。

q:如何設定已經訪問的位置,避免再次訪問?

記 matrix 為生成的矩陣,其初始元素設為 0。由於填入的元素均為正數,我們可以判斷當前位置的元素值,若不為 0,則說明已經訪問過此位置

class

solution

:def

generatematrix

(self, n:

int)

-> list[list[

int]]:

dirs =[(

0,1)

,(1,

0),(

0,-1

),(-

1,0)

] matrix =[[

0]* n for _ in

range

(n)]

row, col, diridx =0,

0,0for i in

range

(n * n)

: matrix[row]

[col]

= i +

1 dx, dy = dirs[diridx]

r, c = row + dx, col + dy

if r <

0or r >= n or c <

0or c >= n or matrix[r]

[c]>0:

diridx =

(diridx +1)

%4# 順時針旋轉至下乙個方向

dx, dy = dirs[diridx]

row, col = row + dx, col + dy

return matrix

螺旋矩陣生成 python實現

今天偶然看見了乙個有意思的數列排序題,就嘗試著比劃了一下,確實挺有意思,蠻好玩的。特此記錄下來 螺旋矩陣樣例如下 1 2 3 4 5 6 20 21 22 23 24 7 19 32 33 34 25 8 18 31 36 35 26 9 17 30 29 28 27 10 16 15 14 13 ...

螺旋方針(螺旋矩陣)

螺旋方陣 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 ...