騰訊題(59)螺旋矩陣 II(python)

2021-10-02 10:45:55 字數 1757 閱讀 2305

因此對於本題,我們只需要建立乙個空的矩陣殼,然後按照索引賦值即可。

需要注意一點:建立空殼的時候不可以像下面這樣建立:

sum_matrix =[[

0]*n]* n

原因如下:

python對於list是物件引用的方式,上述建立列表的方式會產生重複賦值的效果。即對座標0,0賦值1,會產生下述情況;

[[1,0,0],[1,0,0],[1,0,0]]

因此,正確建立空殼的方法如下:

sum_matrix =[[

0]*n for i in

range

(n)]

下面是本題的**:

class

solution

:def

generatematrix

(self, n:

int)

-> list[list[

int]]:

# class solution:

# def generatematrix(self, n):

defspiral_coords

(r1, c1, r2, c2)

:#迴圈方式和螺旋矩陣一題一樣

for c in

range

(c1,c2 +1)

:yield r1, c

for r in

range

(r1 +

1, r2 +1)

:yield r, c2

if r1 < r2 and c1 < c2:

for c in

range

(c2 -

1, c1,-1

):yield r2,c

for r in

range

(r2, r1,-1

):yield r,c1

n1 = n*n

number =

list

(range(1

,n1 +1)

)# print(number)

#生成空的矩陣

sum_matrix =[[

0]*n for i in

range

(n)]

# sum_matrix = item_matrix * n

#然後按照位置進行賦值

r1 =

0 c1 =

0 r2 = n -

1 c2 = n -

1 i =

0# print(sum_matrix)

# print(sum_matrix[0][0])

while r1 <= r2 and c1<= c2:

for r,c in spiral_coords(r1,c1,r2,c2)

:print

(r,c)

sum_matrix[r]

[c]= number[i]

# print("輸出當前值")

# print(sum_matrix[r][c])

i +=

1# print(sum_matrix)

r1 +=

1 r2 -=

1 c1 +=

1 c2 -=

1# print(sum_matrix)

return sum_matrix

59 螺旋矩陣 II

給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。示例 輸入 3 輸出 1,2,3 8,9,4 7,6,5 class solution for int i 0 i 2 num 1 i 如果不是第乙個圈,個數需要減少1 if x 1 else r1 n...

59 螺旋矩陣 II

一輪 四種遍歷 後,將座標更新到新一輪的初始位置 x 1 y 1 初始步長 step n 1,之後更新步長 step 2 n為奇數時,最後四種遍歷完之後,再新增處於最中間的數 class solution def generatematrix self,n int list list int res...

59 螺旋矩陣 II

給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。示例 輸入 3 輸出 1,2,3 8,9,4 7,6,5 順時針畫矩陣的過程,用文字描述有 1 從左到右,填充上行 2 從上到下,填充右列 3 從右到左,填充下行 4 從下到上,填充左列 四個為一圈往裡...