傳送門
給定乙個正整數 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...