LeetCode 螺旋矩陣 II 模擬過程 py

2021-09-23 22:00:20 字數 2166 閱讀 7916

傳送門

給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。

示例:

輸入: 3

輸出:[

[ 1, 2, 3 ],

[ 8, 9, 4 ],

[ 7, 6, 5 ]

]

同螺旋矩陣一類似,參考題解,方法一模擬過程

時間複雜度是 o(n

2)

o(n^2)

o(n2),

空間複雜度o(n

2)

o(n^2)

o(n2),

執行用時:48ms

48 ms

48ms

模擬

分為四個遍歷過程,

從左到右遍歷首行的所有元素,並更新當前首行

從上到下遍歷最右列所有元素,並更新當前最右列

從右向左遍歷尾行的所有元素,並更新當前尾行

從下到上遍歷最左列所有元素,並更新當前最左列

舉例:1 1 1 1 1

4 5 5 5 2

4 7 7 6 2

3 3 3 3 2

與之前螺旋矩陣原理類似,不同的地方,需要重新初始化乙個矩陣,並且有個計數的count。

class

solution

(object):

defspiralorder

(self, matrix)

:"""

:type matrix: list[list[int]]

:rtype: list[int]

"""matrix=

for i in

range

(n):[0

for i in

range

(n)]

) head_row=

0 rail_row=

len(matrix)-1

#當前尾部的行數索引

l_col=

0 r_col=

len(matrix[0]

)-1#當前最右邊的列數索引

count=

1while head_row<=rail_row and l_col<=r_col:

for i in

range

(l_col,r_col+1)

:#1.從左到右遍歷首行的所有元素

matrix[head_row]

[i]=count

count=count+

1 head_row=head_row+

1#更新當前首行

if head_row>rail_row:

break

for i in

range

(head_row,rail_row+1)

:#2.從上到下遍歷最右列所有元素

matrix[i]

[r_col]

=count

count=count+

1 r_col=r_col-

1#更新當前最右列

if r_colbreak

for i in

range

(r_col,l_col-1,

-1):

#3.從右向左遍歷尾行所有元素

matrix[rail_row]

[i]=count

count=count+

1 rail_row=rail_row-

1#更新當前尾行

for i in

range

(rail_row,head_row-1,

-1):

#4.從下到上遍歷最左列所有元素

matrix[i]

[l_col]

=count

count=count+

1

l_col=l_col+

1#更新當前最左列

return matrix

LeetCode 螺旋矩陣II

給定乙個正整數 n,生成乙個包含 1 到 n 2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。示例 輸入 3 輸出 1,2,3 8,9,4 7,6,5 思路分析 請先查閱 leetcode 螺旋矩陣 這道題與列印螺旋矩陣一樣,按圈層進行操作,把遍歷修改為寫入即可。初始掃瞄座標 執行用時為 4 ...

LeetCode 螺旋矩陣 II

螺旋矩陣 ii 給你乙個正整數n,生成乙個包含1到n 2所有元素,且元素按順時針順序螺旋排列的n x n正方形矩陣matrix。示例 1 輸入 n 3 輸出 1,2,3 8,9,4 7,6,5 示例 2 輸入 n 1 輸出 1 1 n 20 題解思路 模擬矩陣的生成。按照要求,初始位置設為矩陣的左上...

LeetCode 59 螺旋矩陣II

給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。示例 輸入 3 輸出 1,2,3 8,9,4 7,6,5 import numpy as np class solution def generatematrix self,n type n int r...