因此對於本題,我們只需要建立乙個空的矩陣殼,然後按照索引賦值即可。
需要注意一點:建立空殼的時候不可以像下面這樣建立:
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 從下到上,填充左列 四個為一圈往裡...