第一道題的解題思路:按照從左到右,從上到下,從右到左,從下到上的順序依次列印矩陣中的數字,要注意的是判斷拐點的邊界條件,和時刻保持左不能大於右,上不能大於下。
**如下:
class
solution
:def
spiralorder
(self, matrix: list[list[
int]])
-> list[
int]:if
not matrix:
return
left =
0 top =
0 bottom =
len(matrix)-1
right =
len(matrix[0]
)-1 res =
while left <= right and top <= bottom:
# from left to right
for i in
range
(left, right +1)
:[i]
) top +=
1if top > bottom:
break
#from top to bottom
for i in
range
(top, bottom +1)
:[right]
) right -=
1if left > right:
break
#from right to left
for i in
range
(right, left -1,
-1):
[i])
bottom -=
1#from bottom to top
for i in
range
(bottom, top -1,
-1):
[left]
) left +=
1return res
第二道題是第一道題的變種,解題思路類似。
**如下
class
solution
:def
generatematrix
(self, n:
int)
->[[
int]]:
ifnot n:
return
left, right, top, bottom =
0, n -1,
0, n -
1 mat =[[
0for _ in
range
(n)]
for _ in
range
(n)]
num, tar =
1, n * n
while num <= tar:
for i in
range
(left, right +1)
:# left to right
mat[top]
[i]= num
num +=
1 top +=
1for i in
range
(top, bottom +1)
:# top to bottom
mat[i]
[right]
= num
num +=
1 right -=
1for i in
range
(right, left -1,
-1):
# right to left
mat[bottom]
[i]= num
num +=
1 bottom -=
1for i in
range
(bottom, top -1,
-1):
# bottom to top
mat[i]
[left]
= num
num +=
1 left +=
1return mat
順時針列印矩陣
輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 45 6 7 89 10 11 1213 14 15 16則依次列印出數字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。這個題目 寫的並不好感覺,好多if看著就煩,就是...
順時針列印矩陣
題目 給定乙個矩陣,從外向內順時針列印矩陣中的每乙個數字。例如 給定矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 輸出應該為 分析 這道題的意思非常直觀,給人的感覺也是so easy,然而實際去做的時候會發現,如果結構劃分的不好,會出現很多的迴圈,而且包括對各種...
順時針列印矩陣
from 題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如 如果輸入如下矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次列印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。網上聽說聽到包括autod...